2016-04-04 8 views
8

私は、これらのステートメントを持っている: u65549は有効なJava識別子ですか?

int \u65549 = 9; 
System.out.println(\u65549); 

これは完全にコンパイルされます。そして、出力

9 

しかし:

System.out.println(Character.isJavaIdentifierStart(\u65549)); 

出力

false 


は、私はこのトピックに関するいくつかの研究をしました。私は文書を読んで、それは言う:

このメソッドは、補助文字を処理することはできません。補助文字を含むすべてのUnicode文字をサポートするには、isJavaIdentifierStart(int)メソッドを使用します。

は、その後、私はこれでした:

int x = \u65549; 
System.out.println(Character.isJavaIdentifierStart(x)); 

をしかし、たとえこれが出力します。

false 

をだから、これはJavaが識別子である\u65549上で混同されていることを、意味するのでしょうか?

+0

@ bcsb1001両方のスニペットで 'int \ u65549'宣言を削除したので、問題を再現できませんでした。 – rhino

+0

受け入れられた答えは、あなたの3番目の例を挙げるのを忘れました。実際には 'int \ u65549 = 9(これを忘れた場合は、これを一番上に表示する必要があります)。 int X = \ u65549; Sop(Character.isJavaIdentifierStart(x)); 'int A = 9;と同じです。 int X = A; Sop(Character.isJavaIdentifierStart(X)); 'これは第2の例と同じ結果を意味します' int A = 9; Sop(Character.isJavaIdentifierStart(A)); ' –

答えて

8
int \u65549 = 9; 
System.out.println(Character.isJavaIdentifierStart(\u65549)); 

\u65549も値9を含むように起こる変数の名前です。それはすべき(とし)あなたが書いたかのように同じ操作を行います。

falseを印刷し
System.out.println(Character.isJavaIdentifierStart(9)); 

を、あなたは空白文字で始まるJava識別子を持つことができないので、(\u0009は、水平タブ、'\t'ためのコードポイントです) 。

+0

ああ、そうです。ありがとう。 – Hackerdarshi

+0

通知で今削除されたコメントが表示されましたか? :)私はすぐに訂正したという私の考えにはっきりと間違いがありましたが、良い点は投稿をもっとはっきりさせる助けとなりました。 **編集:**私はちょうど改訂履歴をチェックし、あなたが最初に同じミスをしたようだと思われる。私は一人ではありません:) – rhino

2

\u65549は、ユニコード文字\u6554と解釈され、その後には文字9が続きます。

これはStringで有効な構文です。

それ以外の場合、\u65549は有効なユニコード識別子ではありません。 ユニコードプレフィックス(\u)が見つかった場合、文字列は有効な部分(4文字の16進数の範囲)を取ります。したがって、有効な識別子部分のみを取り、有効な文字を取得します。ここで

+0

これらのメソッドはなぜfalseを返しますか? – Hackerdarshi

+0

'Character.isJavaIdentifierStart(\ u6554)'とは何ですか? –

+0

@AndyTurnerコンパイルされません。エラーは「シンボルを見つけることができません、varaiable 」(実際は正方形を描きます) – Hackerdarshi

関連する問題