将整数格式化为%d和%s之间的区别是什么?

时间:2018-06-14 09:33:30

标签: java string

虽然两者在语法上都是有效的,但是在它们之间应该注意哪些重要的潜在差异:

String result = String.format("Here is a number - %s", someIntValue);

VS

String result = String.format("Here is a number - %d", someIntValue);

两种情况下someIntValue都是int

4 个答案:

答案 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。