Java 为什么String.format接受整数而不是%s?

Java 为什么String.format接受整数而不是%s?,java,string,string-formatting,string.format,Java,String,String Formatting,String.format,查看Java String.format()的两个引用,我发现它们提到它具有以下格式: public static String format(String format, Object... args) 因此,我可以写以下内容: String newStr = String.format("%s,%s,%s", 1, 2, 3); 但我不能这样做: String newStr = String.format("%d,%d,%d", "1", "2", "3"); 为什么我可以用整数代替%

查看Java String.format()的两个引用,我发现它们提到它具有以下格式:

public static String format(String format, Object... args)
因此,我可以写以下内容:

String newStr = String.format("%s,%s,%s", 1, 2, 3);
但我不能这样做:

String newStr = String.format("%d,%d,%d", "1", "2", "3");

为什么我可以用整数代替%s,但不能用整数代替%s?它正在进行从int到字符串本身的类型转换吗?

是。对于
%s
,它会调用
toString
,无论您在其中设置了什么。这适用于Java中的所有内容(但可能会产生有趣的输出)

对于
%d
您需要提供一个整数类型(如
整数
大整数
)。未尝试自动转换


您可以在中了解更多信息(请参阅关于转换的部分)。

那么,在定义了%s的地方使用int是否被认为是不好的做法?或者在值上调用toString是多余的吗?不,当您想要获得
toString
输出时,可以在所有内容上使用
%s
。使用
%d
以提高清晰度,或者如果需要控制格式(如位数)。在参数上自己调用
toString
是多余的/适得其反的/非空安全的。