この記事では、javap を使用して Java 文字列操作を分析する方法について詳しく説明します。必要な方は参考にしていただければ幸いです。
単純な文字列割り当て操作について、Java コードのこの行を見てみましょう。
String a = "i042416";
コマンド ラインを使用して、このコード行を含む Java クラスを逆コンパイルし、そのバイトコードを表示します:
javap -v constant.ConstantFolding
文字列「i042416」が Java コンパイラによって定数プールに追加されたことがわかります。
Java コード文字列 a = "i042416" は、次の 2 つのバイトコード文に変換されます。
ldc #16: まず、JVM の基礎となるネイティブ メソッド StringTable::intern が呼び出され、String の内部ストレージ実装 char[] が生成されます。次に、ldc #16 を実行して、定数プール内のコード名 #16 の定数をスタック (i042416) にロードします。 2. astore_1: 「i042416」の参照をシリアル番号 1 のローカル変数 (つまり、コード内のローカル変数 a) に保存します。 もう少し複雑な例を見てみましょう。 文字列の結合操作を実行します。
String aa1 = "i042416"; String aa2 = "jerrywang"; String aa3 = "i042416" + "jerrywang";コンパイル段階で、コンパイラのバイトが 2 つの文字列定数の値を結合し、その結果「i042416jerrywang」が新しい文字列定数として変数 aa3 に格納されることがわかります。 、定数内 プール内のコードネームは#21です。
したがって、変数 aa1 と aa3 は実際には定数を指します。 pool 内の同じ定数であるため、 == との直接比較も true を返します。
String aa1 = "i042416jerrywang"; String aa2 = "jerrywang"; String aa3 = "i042416" + "jerrywang"; System.out.println(aa1 == aa3);
以上がjavapを使用してJava文字列操作を分析する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。