【java解惑】Unicodeエスケープの使用


次のコードを示します.
public class Example014 {

	public static void main(String[] args) {
		/**
		 * it is a test for \utest.
		 */
		// \u0022     Unicode  
		System.out.println("a\u0022.length() + \u0022b".length());
	}
}

結果の説明:
上記のプログラムはコンパイルエラーがあります.複数行のコメントを削除すると、コンパイルエラーが解消され、出力結果は2.
   
結果分析:
まず、コンパイルエラーの原因を分析すると、コンパイルエラーは、1つのuで始まるUnicodeエスケープ文字シーケンスを含む複数行の注釈によって引き起こされたことは間違いないが、4つの16進数(0~65535)に追いつかず、そのエスケープが失効した.JAvaは、コメントおよびコードでuで始まるUnicodeエスケープ文字を使用できますが、エスケープは有効でなければなりません.そうしないと、コンパイラはエラーを報告します.
このセグメントの注釈を削除したり、このエスケープを有効にしたりした後、上記のコードを実行して得られた結果は2であり、なぜであるか.もともと、Javaは文字列の字面定数におけるUnicodeエスケープ文字に対して特別な処理を提供していなかった.コンパイラは、プログラムを様々なシンボルに解析する前に、Unicodeエスケープ文字を表す文字に変換します.したがって、プログラム内の第1のUnicodeエスケープ文字は、単一文字列の字面定数(「a」)の終了引用符として、第2のUnicodeエスケープ文字は、別の単一文字列の字面定数(「b」)の開始引用符として、プログラムが実際に実行されるコードは以下の通りである.
System.out.println("a".length() + "b".length());

このように,出力結果が2であることも不思議ではない.
(注:本【java解惑】シリーズは、いずれもブロガーが『java解惑』原書を読んだ後、原書の説明と例の部分を改編し、ブロガーに書いて発表したものである.すべての例は自らテストに合格し、githubに共有されている.これらの例を通じて、自分を励まし、他人に恩恵を与える.同時に、本シリーズのすべてのブロガーはブロガー個人の微信公衆番号(「愛題猿」または「ape_it」を検索する)に同期して発表される.みんなが読むのに便利です.もし文の中に原作者の権利を侵害する内容があれば、直ちにブロガーに知らせて、直ちに削除してください.読者が文の内容に異議や問題がある場合は、ブログの伝言や微信の公衆番号の伝言などを通じて共同で検討することを歓迎します.)
ソースアドレス:https://github.com/rocwinger/java-disabuse
本文は“winger”のブログから出て、転載をお断りします!