在java中,
"回车"表示为'\r'
&安培;
"换行"表示为'\n'
。
但Java不允许,
"回车"作为'\u000d'
和
"换行"为'\u000a'
。
为什么?
答案 0 :(得分:3)
Unicode转义序列在源转换中的应用早于字符文字转义序列。 Unicode转义序列在过程的早期转换为非常 - 在任何其他lexing发生之前,包括在检测到换行之前。有关详细信息,请参阅JLS 3.2。
因此,当您将\u000a
放入Java源文件时,它的行为就像您在其中放置实际换行符一样 - 导致换行到目前为止正如编译器的其余部分所关注的那样。
(我个人认为这是一个设计错误;我更喜欢C#方法,只允许在代码中非常特定的点使用Unicode转义序列,但这是另一回事。)
答案 1 :(得分:2)
Unicode转义符在Java源文件中的任何位置都可以识别,而不仅仅是在字符串文本中,并且在编译器链中很早就会被处理。 \u000d
被视为文字回车,而不是转义回车,即对于源代码
String cr = "\u000d";
编译器看到的是
String cr = "
";
这不是合法的Java代码。