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

于 2013-08-14T04:43:26.423 に答える
0

これはまったく混乱しません。一重引用符をランダムに散らばらせており、それらが無関係であると予想しています。最初のケースでは、1 文字の値を変数に代入\u0061しています。char次に、文字リテラルを変数名として使用しようとしていますが、機能しません。次に、Unicode 形式の文字 (引用符で囲まれていない) を変数名として使用していますが、これは問題ありません。おそらく、Java のクォート ルールとシェルを混同していませんか?

于 2013-08-14T04:43:38.940 に答える
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 に答える