この記事の内容は、Java の自動ボックス化と自動アンボックス化とは何なのかについて簡単に説明することです。困っている友人は参考にしていただければ幸いです。
#自動アンボックス化と自動ボックス化#Java は、各基本データ型に対応するラッパー型を提供します。例:
public class TestMain { public static void main(String[] args) { Integer i = 10; } }
このプロセスでは、対応する Integer オブジェクトが値に基づいて自動的に作成されます。これが自動ボックス化
です。別のコードを見てください:public class TestMain { public static void main(String[] args) { Integer integer = 10; int i = integer; } }
自動ボックス化と自動アンボックス化の原理も非常に簡単です。コマンド ライン プログラムを使用して、CLASSPATH (つまり、bin ディレクトリ内の .class ファイルが配置されているパス) を入力し、javap で逆コンパイルして、生成されたバイトコードを確認します。
逆コンパイルされたコンテンツが大量にあります。重要なポイントのみに焦点を当てます。 パート:public static void main(java.lang.String[]); flags: ACC_PUBLIC, ACC_STATIC Code: stack=1, locals=3, args_size=1 0: iconst_1 1: invokestatic #16 // Method java/lang/Integer.valueO f:(I)Ljava/lang/Integer; 4: astore_1 5: aload_1 6: invokevirtual #22 // Method java/lang/Integer.intVal ue:()I 9: istore_2 10: return
Java 仮想マシンが自動的に次の valueOf メソッドを呼び出すことを確認してください。 Integer; 自動アンボックス中 の場合、Java 仮想マシンは Integer の intValue メソッドを自動的に呼び出します。 これは、自動開梱と自動梱包の原理です。 null ポインター例外に注意してください
次のようなコードがあります:public static void main(String[] args) throws Exception { Object obj = getObj(null); int i = (Integer)obj; } public static Object getObj(Object obj) { return obj; }
小さなトラップ
2 つのコード部分を見てください。最初のコード部分は次のとおりです。public class TestMain { public static void main(String[] args) { Integer i1 = 100; Integer i2 = 100; Integer i3 = 200; Integer i4 = 200; System.out.println(i1 == i2); System.out.println(i3 == i4); } }
true false
public class TestMain { public static void main(String[] args) { Double d1 = 100.0; Double d2 = 100.0; Double d3 = 200.0; Double d4 = 200.0; System.out.println(d1 == d2); System.out.println(d3 == d4); } }
false false
public static Integer valueOf(int i) { final int offset = 128; if (i >= -128 && i <= 127) { // must cache return IntegerCache.cache[i + offset]; } return new Integer(i); }
Java ビデオ チュートリアル
、Java 開発グラフィック チュートリアル
、ブートストラップ ビデオ チュートリアルをご覧ください。
以上がJava の自動ボックス化と自動アンボックス化とは何なのかについて簡単に説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。