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

\u65549是有效的Java标识符吗?,java,identifier,Java,Identifier,我有以下声明: int \u65549 = 9; System.out.println(\u65549); 这是完美的汇编。和产出 9 但是: System.out.println(Character.isJavaIdentifierStart(\u65549)); 输出 false 我对这个话题做了一些研究。我读了文件,上面写着: 此方法无法处理补充字符。要支持所有Unicode字符,包括补充字符,请使用isJavaIdentifierStart(int)方法 然后我做了这个: in

我有以下声明:

int \u65549 = 9;
System.out.println(\u65549);
这是完美的汇编。和产出

9
但是:

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

false

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

此方法无法处理补充字符。要支持所有Unicode字符,包括补充字符,请使用
isJavaIdentifierStart(int)
方法

然后我做了这个:

int x = \u65549;
System.out.println(Character.isJavaIdentifierStart(x));
但即使是这张照片:

false

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

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

这是
字符串中的有效语法

除此之外,
\u65549
不是有效的unicode标识符。 当字符串遇到unicode前缀(
\u
)时,它只接受有效部分(
4个十六进制字符),因此它只接受有效标识符部分,并获得有效字符

int \u65549 = 9;
System.out.println(Character.isJavaIdentifierStart(\u65549));
这里,
\u65549
是一个变量的名称,该变量恰好也包含值
9
。它应该(并且确实)像你写的那样:

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

它打印的是
false
,因为Java标识符不能以空格字符开头(
\u0009
是水平选项卡的代码点,
'\t'
)。

那么为什么这些方法返回false呢?character.isJavaIdentifierStart(\u6554)
print?@AndyTurner它不编译。错误是:“找不到符号,变量”(它实际上画了一个正方形)。
\uxxx
语法作为SourceAnywhere的一部分是有效的,而不仅仅是在
字符串中,
@bcsb1001您在两个代码段中都删除了
int\u65549
声明,这就是为什么你不能重现这个问题。被接受的答案忘了提到你的第三个例子。实际上
int\u65549=9(您忘了提到它必须出现在顶部);int X=\u65549;Sop(Character.isJavaIdentifierStart(x))
inta=9相同;int X=A;Sop(Character.isJavaIdentifierStart(X)),这意味着与第二个示例相同的结果
inta=9;Sop(Character.isJavaIdentifierStart(A))您确实在通知中看到了我现在删除的评论,是吗?:)我在思考中犯了一个明显的错误,我很快就改正了,但好的是我帮助你的帖子更加清晰。编辑:我刚刚检查了修订历史,似乎你刚开始也犯了同样的错误。很高兴我不是一个人:)