为什么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';
有效?
答案 0 :(得分:2)
您不能将文字('a'
)放在标识符的中间。
该行
char 'a' = 'a';
由于没有标识符而无法编译,您无法将一个文字分配给另一个文字。
但是,允许使用Unicode。这很难读: - )
答案 1 :(得分:1)
您不能在文字标识符中加入文字字符'a'
。您可以使用unicode,\u0061
。
答案 2 :(得分:0)
这根本不会令人困惑。你随机散布单引号并期望它们无关紧要。在第一种情况下,您将单个字符\u0061
的值分配给char
变量。然后你试图使用一个字符文字作为变量名,这是行不通的。然后你使用Unicode格式的字符(未引用)作为变量名称,这没关系。也许你把Java的引用规则与shell混淆了?
答案 3 :(得分: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)