这四种格式化相同数据的方法有什么不同吗?
// Solution 1
System.out.printf("%.1\n",10.99f);
// Solution 2
System.out.format("%.1\n",10.99f);
// Solution 3
System.out.print(String.format("%.1\n",10.99f));
// Solution 4
Formatter formatter = new Formatter();
System.out.print(formatter.format("%.1\n",10.99f));
formatter.close();
答案 0 :(得分:2)
前两个完全相同,因为printf
被实现为(source)
public PrintStream printf(String format, Object ... args) {
return format(format, args);
}
后两者也完全相同,因为String.format
被实现为(source)
public static String format(String format, Object ... args) {
return new Formatter().format(format, args).toString();
}
最后,第2和第4个或多或少相同,从PrintStream.format
(source)的实现可以看出。在引擎盖下,它也创造了一个新的
Formatter
(如果需要)并在format
上调用Formatter
。
public PrintStream format(String format, Object ... args) {
try {
synchronized (this) {
ensureOpen();
if ((formatter == null)
|| (formatter.locale() != Locale.getDefault()))
formatter = new Formatter((Appendable) this);
formatter.format(Locale.getDefault(), format, args);
}
} catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
} catch (IOException x) {
trouble = true;
}
return this;
}
答案 1 :(得分:1)
System.out
是PrintStream
有关详细信息,请点击此链接:Details about various format
调用
形式的此方法 out.printf(Locale l, String format,Object... args)
的行为方式与调用
完全相同 out.format(Locale l,String format,Object... args)
所以1& 2是相同的b / w它们没有任何区别。 和3&如果与1和1相比,那么只有相同的编译时间差。 2。
答案 2 :(得分:0)
考虑到String.format()
来电new Formatter().format()
和PrintWriter.printf()
来电几乎相同,不应该有任何区别。
答案 3 :(得分:0)
System.out.printf()
,System.out.format()
是PrintStream
的方法。它们是等效的。
printf()
只会将新格式化的字符串显示为System.out
,而format()
会返回一个新的格式化字符串。