アフォストロフィーの値を char に割り当てたい:
char a = '\'';
ただし、コードとの一貫性を保つために、Unicode バージョンのアポストロフィ (\u0027) を使用したいと思います。
char a = '\u0027';
しかし、このようにすると、「閉じられていない文字リテラル」というエラーが発生します。
コードに Unicode コードを保持しながら、この割り当てを行うにはどうすればよいですか?
\u0027
うまくいかない理由は、Unicode エスケープがコンパイラーによって非常に早い段階'
で処理されるため です。コンパイラは実際にこれを見ます:
char a = ''';
...これは当然問題です。JLS は、 §3.10.4 ( Character Literals ) で改行などに関連してこれについて説明しています。
率直に言って、私はあなたが書いたほうがいいと思います
char a = '\'';
...しかしchar
、数値型なので、これを行うことができます:
char a = 0x0027;
もちろん、これを行うことができます:
char a = "\u0027".charAt(0);
...しかし、それは少しやり過ぎだと誰もが同意できると思います。;-)
または、グレッグの答えをチェックしてください: char a = '\u005c\u0027';
(\u005c
はもちろん、バックスラッシュです。コンパイラは を認識します'\''
)。
これもできます
char a = '\u005c\u0027';
\u005cは\の Unicode です
javac は他の処理を行う前に、まずすべての \u#### を char に変換します。あなたのコードは
char a = ''';
それがコンパイルされない理由です。
\u#### は、文字/文字列リテラルだけでなく、変数名など、どこでも使用できます。
ただし、識別子に非ラテン文字を使用することはめったにありません。誰かがそうするなら、彼はおそらく彼のネイティブの文字セットを使用し、\u#### も必要としません。
したがって、文字/文字列リテラル以外の場所で \u#### を実際に目にすることはありません。これは、疑いを持たない人に間違った印象を与えます。
タイム マシンがある場合は、この機能を削除する必要があります。混乱を招き、使用されていないためです。
ここに別のオプションがありますが、実際にはやり過ぎです。
char c = "\u0027".charAt(0);