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