虽然两者在语法上都是有效的,但是在它们之间应该注意哪些重要的潜在差异:
String result = String.format("Here is a number - %s", someIntValue);
VS
String result = String.format("Here is a number - %d", someIntValue);
两种情况下someIntValue
都是int
?
答案 0 :(得分:5)
对于格式化程序语法,请参阅the documentation。
%s
:
如果arg实现了
Formattable
,那么arg.formatTo
就是。{ 调用。否则,通过调用arg.toString()
获得结果。
Integer
未实现Formattable
,因此调用了toString
。
%d
:
结果格式为十进制整数
在大多数情况下,结果是相同的。但是,%d
也受Locale
的约束。例如,在印地语中,100000将格式化为100000(Devanagari numerals)
您可以运行此简短代码段以查看具有“非标准”输出的区域设置:
for (Locale locale : Locale.getAvailableLocales())
{
String format = String.format(locale, "%d", 100_000);
if (!format.equals("100000")) System.out.println(locale + " " + format);
}
答案 1 :(得分:3)
%s
基本上会调用对象的toString()
方法。所以很可能你总会得到整数。
%d
通知格式化程序它实际上是一个整数。如果使用具有不同数字系统等的Locale
,则可能存在要遵守的区域设置特定格式。
对于演示差异的演示(%n
生成OS依赖行分隔符):
Locale.setDefault(new Locale("th", "TH", "TH"));
System.out.printf("%s %n", 42); //output: 42
System.out.printf("%d %n", 42); //output: ๔๒
答案 2 :(得分:0)
在你的情况下没有区别,但一般来说,如果你不确定格式化的值的类型,使用%s会很有感觉。
答案 3 :(得分:-1)
没有区别,两者都是一样的,因为整数将被视为字符串! 您不能将%d用于String,但您可以在String.format中将%s用于int! 你甚至可以使用System.out.printf()打印int,整数将被简单地解析为String。