gpt4 book ai didi

java - 为什么Java源码中有些ASCII字符不能以 '\uXXXX'的形式表示?

转载 作者:IT老高 更新时间:2023-10-28 20:23:24 26 4
gpt4 key购买 nike

我今天(再次)偶然发现了这个:

class Test {
char ok = '\n';
char okAsWell = '\u000B';
char error = '\u000A';
}

它不编译:

Invalid character constant in line 4.

编译器似乎坚持让我写 '\n' 代替。我看不出这是什么原因,但它非常很烦人。

是否有逻辑解释为什么字符具有特殊符号(如 \t\n\r)必须在Java源代码中以那种形式表达?

最佳答案

Unicode 字符被它们的值替换,所以你的行被编译器替换为:

char error = '
';

这不是一个有效的 Java 语句。

这是由 Language Specification 决定的。 :

A compiler for the Java programming language ("Java compiler") first recognizes Unicode escapes in its input, translating the ASCII characters \u followed by four hexadecimal digits to the UTF-16 code unit (§3.1) of the indicated hexadecimal value, and passing all other characters unchanged. Representing supplementary characters requires two consecutive Unicode escapes. This translation step results in a sequence of Unicode input characters.

这可能会导致令人惊讶的事情,例如,这是一个有效的 Java 程序(它包含隐藏的 unicode 字符)- courtesy of Peter Lawrey :

public static void main(String[] args) {
for (char c‮h = 0; c‮h < Character.MAX_VALUE; c‮h++) {
if (Character.isJavaIdentifierPart(c‮h) && !Character.isJavaIdentifierStart(c‮h)) {
System.out.printf("%04x <%s>%n", (int) c‮h, "" + c‮h);
}
}
}

关于java - 为什么Java源码中有些ASCII字符不能以 '\uXXXX'的形式表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15275945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com