![](/img/trans.png)
[英]how can we print (n +nn +nnn) using println for this code?
[英]Why does "println" exist when we can use "\n"?
我是 Java 新手,想知道為什么有人會使用 System.out.println() 來更改行,而不是將 "\\n" 放在括號內。 這兩者之間有什么區別嗎?
請參閱Javadoc (重點是我的):
[
PrintStream.println
] 通過寫入行分隔符字符串終止當前行。 行分隔符字符串由系統屬性line.separator
定義,不一定是單個換行符 ('\\n'
) 。
例如,Windows 使用\\r\\n
作為其默認的換行符。
此外,必須將任何換行符附加到您正在打印的內容中不僅冗長(有人可能會說很粗魯),而且效率低下。
考慮用print("a really big string" + "\\n")
替換println("a really big string")
print("a really big string" + "\\n")
。 讓我們假設真正的大字符串實際上非常大,而不是編譯時常量。 因為字符串是不可變的,所以必須創建一個新字符串,完全復制那個非常大的字符串並附加換行符。 現在,為了打印一些東西(一次),你不得不努力復制一個非常大的東西。
還要考慮打印非字符串,例如println(0)
和print(0 + "\\n")
。 現在調用了一個完全不同的重載( println(String)
而不是println(int)
),並且它必須構造一個 String ,以前它可以使用專門的有效方法來打印簡單的int
s。
通過提供在內部處理附加換行符的方法,可以(或至少可以)避免這兩個效率問題。
例如,不同操作系統中的新行是不同的
Unix based systems=> "\n"
windows => "\r\n"
and some other machines used just a "\r". (Commodore, Apple II, Mac OS prior to OS X, etc..)
如果你不使用println
你必須自己管理這些或者像這樣通過系統屬性獲取它
System.getProperty("line.separator");
正如評論中所指出的,簡單地附加\\n
並不能在所有環境(例如 Windows)中工作。 如果要附加以“手動”結尾的正確行,則需要使用以下任一方法檢索它
System.getProperty("line.separator");
或者,在 Java 7 中:
System.lineSeparator()
另請參閱此答案(這是這兩行代碼的來源)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.