我會考慮下載你對應的Java版本的Javadoc和源罐子,因爲你所有的問題可以很容易地通過查看源文件來回答。
System.out.printf(formatString, args)
System.out
是PrintStream
。 PrintStream.printf(formatString, args)
實際上是一個方便的方法調用PrintStream.format(formatString, args);
。
System.out.format(formatString, args)
這是PrintStream.format(formatString, args)
調用它採用了Formatter
格式化結果並將其追加到PrintStream
。
String.format(formatString, args)
這種方法也使用了Formatter
並返回與格式字符串和args的格式化結果一個新的字符串。
System.console().format(formatString, args)
System.console()
是Console
。 Console.format(format, args)
使用Formatter
向控制檯顯示格式化的字符串。
new Formatter(new StringBuffer("Test")).format(formatString, args);
這將創建使用傳遞的字符串緩衝區Formatter
的一個實例。如果你使用這個電話,那麼你將不得不使用out()
方法來獲得由Formatter
寫入Appendable
。相反,你可能想要做這樣的事情:
StringBuffer sb = new StringBuffer("Test");
new Formatter(sb).format(formatString, args);
// now do something with sb.toString()
最後:
DecimalFormat.format(value);
NumberFormat.format(value);
這些是值的兩種concreate格式化是做不使用Formatter
類。 DecimalFormat
和NumerFormat
都有一個format
方法,它採用雙精度或者Number
,並根據這些類的定義將它們格式化爲字符串。據我所知,Formatter
不使用它們。
希望這會有所幫助。
它們只是包裝'Formatter'功能的簡便方法。 (不知道'NumberFormat'及其子類是如何與之相關的,即關係是以哪種方式流動的。) – 2011-12-31 16:51:37
@Dave但是仍然是一個很好的問題,爲什麼我們有'PrintStream.format'和'PrintStream.printf' - afaik他們在同一版本中添加並具有相同的功能。用於printf偶數狀態的jdocs:'調用out.printf(format,args)形式的此方法的行爲與調用out.format(format,args)'的行爲完全相同。奇怪的發佈確實 – Voo 2011-12-31 17:12:55
@Voo我猜想有人添加了所有'printf'的東西來保持'format'功能更符合'print' /'println'等,但這只是一個猜測。大多數API都有一定量的重複,出於各種原因 - 允許不同的樣式,以不同的方式表達意圖等等。 – 2011-12-31 17:17:52