オートボックス化は、プリミティブ型とそれに対応するラッパー クラス オブジェクト間の Java コンパイラーの自動変換です。つまり、int から Integer、double から Double への変換などです。アンボックス化は、ラッパー クラス オブジェクトから同等のプリミティブへの自動変換です。整数から整数へ。この機能は Java バージョン 1.5 で導入されました。
コンパイラは valueOf() メソッドを使用して、プリミティブを対応するラッパー オブジェクト (つまり、オートボックス化) に内部的に変換します。逆の場合は、アンボックス化のパラダイムと同様に、intValue()、doubleValue() などを使用します。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
Java のプリミティブ型とラッパー クラスのマッピングは次のとおりです。
Primitive type | Wrapper class |
boolean | Boolean |
byte | Byte |
char | Character |
float | Float |
int | Integer |
long | Long |
short | Short |
double | Double |
整数の ArrayList を取得し、アンボックス化の概念を利用してみましょう。
import java.util.ArrayList; public class MyClass { public static void main(String args[]) <em>{</em> ArrayList<Integer> intlist = new ArrayList<Integer>(); //wrapper Integer objects being added here intlist.add(1); interest.add(2); //auto-unboxing is happening here int x = intlist.get(0); System.out.println(x); } }
したがって、上記の例では、x に値を追加しているときに、x がプリミティブであるように見えることがわかります。その結果、割り当ての完了中に、ここでボックス化解除が自動的に行われます。
public class MyClass { public static void main(String args[]) { Integer sum =0; for(int i=0;i<10;i++) { sum = sum + i; } System.out.println(sum); } }
以下にあるスニペットを考えてみましょう。これの出力は何になりますか?
public class Main { public static void main(String[] args) { Integer m = 34123; Integer x = 34123; System.out.println(x==m); } }
public class Main { public static void main(String[] args) { Integer m = 100; Integer x = 100; System.out.println(x==m); } }
リテラル プールには 100 が存在するため、これは「true」値として評価されます。
public class Main { public static void main(String[] args) { Overload obj = new Overload(); int i =5; obj.printval(5); Integer m = i; obj.printval(m); } } class Overload { public void printval(int i) { System.out.println("printing the unboxed value "+ i); } public void printval(Integer i) { System.out.println("printing the autoboxed value "+ i); } }
出力:
注: 上記のプログラムを任意の IDE で実行して、上記の出力を取得できます。オートボックス化とアンボックス化のユースケースと、この概念がいかに暗黙的であるか、そしてその長所と短所について説明しました。コーディング時には注意して使用する必要があります。そうしないと、不必要な計算変換オーバーヘッドが追加される可能性があります。したがって、過度のガベージ コレクションのオーバーヘッドや一時オブジェクトの作成を避けるために、変換はプリミティブで実行する必要があります。また、Java のオーバーロード概念を使用したオートボックス化の使用例も確認しました。これに加えて、さらにいくつかの制約を確認できます。
以上がJava でのオートボックス化とボックス化解除の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。