簡體   English   中英

當我們可以使用“\\n”時,為什么會存在“println”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM