【问题标题】:Messed up with Java Declaration搞砸了Java声明
【发布时间】:2013-08-14 04:40:25
【问题描述】:

为什么 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'; 起作用?

【问题讨论】:

  • @Subhrajyoti Majumder 感谢您的编辑..

标签: java unicode character declaration


【解决方案1】:

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

线

char 'a' = 'a'; 

由于没有标识符而无法编译,并且您不能将一种文字分配给另一种文字。

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

【讨论】:

  • 在几乎所有常用语言中,标识符和文字是两种不同的东西。在 Java 中,它们不能混合使用。这是 Java 的规则 :-)
  • @Level29Access Unicode composite characters are different from the decomposed characters
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      可以在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)
      

      【讨论】:

        猜你喜欢
        • 2010-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-04
        • 1970-01-01
        • 2013-11-18
        • 2023-04-05
        相关资源
        最近更新 更多