0

为什么java常量有奇怪的行为(Unicode字符和正常表示)..我的意思是见下面的例子。注意:所有代码都是java语言。

char a = '\u0061';   //This is correct
char 'a' = 'a';     //This gives compile time error
char \u0061 = 'a';  //this is correct no error
ch\u0061r a = 'a';  //This too works
ch'a'r a = 'a';     // This really is confusing compile time error

为什么最后一个声明不起作用而ch\u0061r a='a';起作用?

4

4 回答 4

2

您不能将文字 ( 'a') 放在标识符的中间。

线

char 'a' = 'a'; 

无法编译,因为没有标识符,并且您不能将一个文字分配给另一个文字。

但是,Unicode 是允许的。只是很难阅读:-)

于 2013-08-14T04:42:44.953 回答
1

您不能将文字字符 ,'a'放在标识符中。\u0061不过,您可以使用 unicode,。

于 2013-08-14T04:43:26.423 回答
0

您可以在文字规范中找到原因

Unicode 复合字符不同于分解的字符。

Identifier:
        IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral

IdentifierChars:
        JavaLetter
        IdentifierChars JavaLetterOrDigit

JavaLetter:
        any Unicode character that is a Java letter (see below)

JavaLetterOrDigit:
        any Unicode character that is a Java letter-or-digit (see below)
于 2013-08-14T04:48:04.227 回答
0

这一点也不令人困惑。你随机散布单引号并期望它们无关紧要。在第一种情况下,您将单个字符的值分配给\u0061变量char。然后您尝试使用字符文字作为变量名,这是行不通的。然后,您使用 Unicode 格式的字符(不加引号)作为变量名,这没关系。也许您将 Java 的引用规则与 shell 混淆了?

于 2013-08-14T04:43:38.940 回答