为什么转义序列不能在java中表示为unicodeEscape?

时间:2015-06-10 08:08:17

标签: java ansi-escape

在java中,

"回车"表示为'\r'

&安培;

"换行"表示为'\n'

但Java不允许,

"回车"作为'\u000d'

"换行"为'\u000a'

为什么?

2 个答案:

答案 0 :(得分:3)

Unicode转义序列在源转换中的应用早于字符文字转义序列。 Unicode转义序列在过程的早期转换为非常 - 在任何其他lexing发生之前,包括在检测到换行之前。有关详细信息,请参阅JLS 3.2

因此,当您将\u000a放入Java源文件时,它的行为就像您在其中放置实际换行符一样 - 导致换行到目前为止正如编译器的其余部分所关注的那样。

(我个人认为这是一个设计错误;我更喜欢C#方法,只允许在代码中非常特定的点使用Unicode转义序列,但这是另一回事。)

答案 1 :(得分:2)

Unicode转义符在Java源文件中的任何位置都可以识别,而不仅仅是在字符串文本中,并且在编译器链中很早就会被处理。 \u000d被视为文字回车,而不是转义回车,即对于源代码

String cr = "\u000d";

编译器看到的是

String cr = "
";

这不是合法的Java代码。