\u65549 是有效的 Java 标识符吗?

Is \u65549 a valid Java identifier?

我有这些声明:

int \u65549 = 9;
System.out.println(\u65549);

编译完美。并输出

9

但是:

System.out.println(Character.isJavaIdentifierStart(\u65549));

产出

false


我对这个话题做了一些研究。我阅读了文档,上面写着:

This method cannot handle supplementary characters. To support all Unicode characters, including supplementary characters, use the isJavaIdentifierStart(int) method.

然后我这样做了:

int x = \u65549;
System.out.println(Character.isJavaIdentifierStart(x));

但即使这样打印:

false

那么,这是否意味着 Java 对 \u65549 作为标识符感到困惑?

\u65549 被解释为 unicode 字符 \u6554 ,后跟字符 9.

这是 String 中的有效语法。

除此之外,\u65549 不是有效的 unicode 标识符。 String在遇到unicode前缀(\u)时只取有效部分(4十六进制范围内的字符),所以它只取有效标识符部分,得到一个有效字符。

int \u65549 = 9;
System.out.println(Character.isJavaIdentifierStart(\u65549));

这里,\u65549是一个变量的名称,它也恰好包含值9。它应该(并且确实)和你写的一样:

System.out.println(Character.isJavaIdentifierStart(9));

打印 false,因为你不能有一个以空白字符开头的 Java 标识符(\u0009 是 HORIZONTAL TAB 的代码点,'\t') .