我有这些陈述:
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
作为标识符?
答案 0 :(得分:8)
int \u65549 = 9;
System.out.println(Character.isJavaIdentifierStart(\u65549));
此处,\u65549
是变量的名称,也恰好包含值9
。它应该(并且确实)像你写的那样做:
System.out.println(Character.isJavaIdentifierStart(9));
打印false
,因为您没有以空白字符开头的Java标识符(\u0009
是HORIZONTAL TAB的代码点,'\t'
)。
答案 1 :(得分:2)
\u65549
被解释为unicode字符\u6554
,后跟字符9
。
这是String
中的有效语法。
除此之外,\u65549
不是有效的unicode标识符。
字符串仅在遇到unicode前缀(4
)时获取有效部分(十六进制范围内的\u
个字符),因此它只接受有效的标识符部分,并获取有效字符。