弄乱了Java声明

时间:2013-08-14 04:40:26

标签: java unicode character declaration

为什么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 个答案:

答案 0 :(得分:2)

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

该行

char 'a' = 'a'; 

由于没有标识符而无法编译,您无法将一个文字分配给另一个文字。

但是,

允许使用Unicode。这很难读: - )

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以在specification of literals

中找到原因
  

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)