ホームページ >Java >&#&チュートリアル >javapを使用してJava文字列操作を分析する方法の詳細な説明

javapを使用してJava文字列操作を分析する方法の詳細な説明

不言
不言転載
2018-10-22 15:23:262106ブラウズ

この記事では、javap を使用して Java 文字列操作を分析する方法について詳しく説明します。必要な方は参考にしていただければ幸いです。

単純な文字列割り当て操作について、Java コードのこの行を見てみましょう。

String a = "i042416";

コマンド ラインを使用して、このコード行を含む Java クラスを逆コンパイルし、そのバイトコードを表示します:

javap -v constant.ConstantFolding

javapを使用してJava文字列操作を分析する方法の詳細な説明

文字列「i042416」が Java コンパイラによって定数プールに追加されたことがわかります。

javapを使用してJava文字列操作を分析する方法の詳細な説明

Java コード文字列 a = "i042416" は、次の 2 つのバイトコード文に変換されます。

javapを使用してJava文字列操作を分析する方法の詳細な説明

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です。

javapを使用してJava文字列操作を分析する方法の詳細な説明

javapを使用してJava文字列操作を分析する方法の詳細な説明 したがって、変数 aa1 と aa3 は実際には定数を指します。 pool 内の同じ定数であるため、 == との直接比較も true を返します。

String aa1 = "i042416jerrywang";
String aa2 = "jerrywang";
String aa3 = "i042416" + "jerrywang";
System.out.println(aa1 == aa3);

javapを使用してJava文字列操作を分析する方法の詳細な説明

以上がjavapを使用してJava文字列操作を分析する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。