我正在阅读《Effective Java》,它在所有地方使用
%n
作为换行符号。我已经成功地在Java程序中使用\n
作为换行符。哪个是“正确”的?\n
有什么问题?为什么Java改变了这种C约定?根据快速的谷歌搜索:
还有一种指示符不对应任何参数,即"%n",它输出一个换行符。在某些情况下也可以使用"\n",但由于"%n"始终输出正确的特定于平台的换行符,因此它在各个平台上都是可移植的,而"\n"则不是。
请参考https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
\n
是 Unix 系统中正确的换行符,但其他系统可能使用不同的字符来表示行末。特别是,Windows 系统中使用 \r\n
,而早期的 MacOS 系统使用 \r
。
通过在格式字符串中使用 %n
,您告诉 Java 使用由 System.getProperty("line.separator")
返回的值,该值是当前系统的行分隔符。
System.lineSeparator()
方法作为替代,而不是System.getProperty("line.separator")
;) - NikolaS警告:
如果你正在进行网络编程,你可能更喜欢使用 \n
而不是 %n
,因为在不同平台上运行时,%n
可能会发送不同的字符。
请注意,以下答案仅适用于使用System.out.printf()
或System.out.format()
或Formatter
对象的情况。如果您在System.out.println()
中使用%n
,它将仅产生一个%n
,而不是换行符。
\n
始终生成换行符\u000A
。要获取特定平台的正确行分隔符,请使用%n
。因此,在确保需要\u000A
换行符的情况下(例如在网络编程中),请使用\n
。在所有其他情况下请使用 %n
。%n 格式说明符是一种跨操作系统可移植的行分隔符。但是,它不能作为 System.out.print 或 System.out.println 函数的参数。
始终建议使用此新版本的行分隔符,即上面提到的 \n。
\n
转换为特定平台的换行符,Java则不会) - user202729