繁体   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