把Java声明搞砸了

把Java声明搞砸了,java,unicode,character,declaration,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

为什么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' Works/< p> > p>不能在标识符的中间放置文字(<代码> a)/>代码> 

线路

char 'a' = 'a'; 
不编译,因为没有标识符,并且不能将一个文本分配给另一个文本

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

< p>不能在标识符的中间放置文字(<代码> a '/COD>)。< /P> 线路

char 'a' = 'a'; 
不编译,因为没有标识符,并且不能将一个文本分配给另一个文本


但是,Unicode是允许的。这很难理解:-)

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

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

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

这一点也不混淆。你随机地散布单引号,并期望它们是无关的。在第一种情况下,将单个字符
\u0061
的值赋给
char
变量。然后尝试使用字符文字作为变量名,这是行不通的。然后使用Unicode格式的字符(不带引号)作为变量名,这是可以的。也许您将Java的报价规则与shell混淆了?

您可以在

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


你可以从中找到原因

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


@Subhrajyoti Majumder感谢您的编辑。@Subhrajyoti Majumder感谢您的编辑。.标识符和文字在几乎所有常用语言中都是两种不同的东西。在Java中,它们不能混合。这是Java的规则:-@Level29Access
Unicode复合字符与分解字符不同
标识符和文字在几乎所有常用语言中都是两种不同的东西。在Java中,它们不能混合。这是Java的规则:-)@Level29Access
Unicode组合字符与分解字符不同