Java でのオートボクシングとアンボクシング
オートボクシングはプリミティブデータ型を同等のラッパー型に変換し、アンボクシングはラッパー型をプリミティブデータ型に変換することです。この機能は Java に組み込まれています。
このチュートリアルでは、Java での自動ボクシングとアンボクシングの使用について説明およびデモンストレーションします。
Java での自動ボクシング
上記のように、自動ボクシングはプリミティブデータ型をオブジェクトと同じラッパー型クラスに変換します。たとえば、long
から Long
または int
から Integer
です。
これらのプリミティブデータ型とそれに対応するラッパー型クラスのリストを以下に示します。
プリミティブ型 | ラッパーの型 |
---|---|
int |
Integer |
boolean |
Boolean |
double |
Double |
float |
Float |
byte |
Byte |
char |
Character |
long |
Long |
short |
Short |
Java で自動ボクシングを使用できる場合は 3つあります。
- どのメソッドでも、プリミティブデータ型をパラメーターとして渡す必要があります。そのメソッドには、対応するラッパークラスオブジェクトが必要です。
- 対応するラッパークラスを持つ変数にプリミティブデータ型を割り当てている間。
- コレクションフレームワーククラスを操作している間、コンパイラは Java でオートボクシングを実行する必要があります。
3つのケースがあります。それぞれの場合の例を作成してみましょう。最初のケースの例を参照してください。
package Delfstack;
public class Autoboxing_Test {
public static void Number(Integer x) {
System.out.println(x);
}
public static void main(String[] args) {
// Compiler performs Autoboxing here. it converts primitive type to wrapper type Integer object.
int x = 10;
Number(x);
}
}
プリミティブ型 int
をパラメーターとして、ラッパークラス Integer
を必要とするメソッドに渡しました。コンパイラはここでオートボクシングを実行します。出力を参照してください:
10
2 番目のケースの例を参照してください。
package Delfstack;
public class Autoboxing_Test {
public static void main(String[] args) {
// Assigning primitive long value to Wrapper Long variable x. Compiler performs autoboxing
Long x = 430L;
// Assigning primitive char value to Wrapper Character variable y. Compiler performs autoboxing
Character y = 'a';
System.out.println(x);
System.out.println(y);
}
}
プリミティブデータ型の値をラッパー型変数に割り当て、コンパイラーがオートボクシングを実行しました。出力を参照してください:
430
a
3 番目のケースの例を参照してください。
package Delfstack;
import java.util.ArrayList;
public class Autoboxing_Test {
public static void main(String[] args) {
ArrayList<Long> Long_List = new ArrayList<Long>();
// while working with collections framework the compiler performs autoboxing
Long_List.add(220L);
Long_List.add(330L);
System.out.println(Long_List);
}
}
コレクションフレームワーククラスを操作している間、コンパイラは上記のコードのように Java でオートボクシングを実行する必要があります。プリミティブ型の long
要素をラッパー型の Long
リストに追加します。出力を参照してください:
[220, 330]
Javaでのアンボックス
Java でのボックス化解除は、ラッパークラスのオブジェクトを同じプリミティブデータ型に変換します。これは、オートボクシングの反対の操作です。たとえば、Integer
を int
に、または Long
を long
に変換すると、前のテーブルをボクシングに使用することもでき、その逆も可能です。
また、アンボクシングは以下の3つのケースで適用できる。
- ラッパークラスのオブジェクトを、プリミティブ型の値を必要とするメソッドに渡している間。
- ラッパークラスオブジェクトが対応するプリミティブ変数に割り当てられている場合。
- コレクションフレームワークを操作している間。
Java の各ケースの例を試してみましょう。最初のケースの例を参照してください。
package Delfstack;
public class Unboxing_Test {
public static void Number(int x) {
System.out.println(x);
}
public static void main(String[] args) {
Integer x = new Integer(340);
// We passed Integer wrapper class object, the compiler will convert it to int because method
// requires int
Number(x);
}
}
コンパイラーは、ラッパークラスのオブジェクトをプリミティブ型の値を必要とするメソッドに渡すときに、ボックス化解除を実行します。出力を参照してください:
340
2 番目のケースの例:
package Delfstack;
public class Unboxing_Test {
public static void main(String[] args) {
Long x = new Long(340L);
Integer y = new Integer(450);
// Performing unboxing here. assigning Long object to primitive long type similarly Integer to
// int
long a = x;
int b = y;
System.out.println(a);
System.out.println(b);
}
}
ラッパークラスオブジェクトが対応するプリミティブ変数に割り当てられると、コンパイラはボックス化解除を実行します。出力を参照してください:
340
450
3 番目のケースの例:
package Delfstack;
import java.util.ArrayList;
public class Unboxing_Test {
public static void main(String[] args) {
ArrayList<Long> Long_List = new ArrayList<Long>();
Long_List.add(230L);
Long_List.add(340L);
Long_List.add(450L);
// The get method returns an Long object and we assigned it to the long primitive type
long x = (long) Long_List.get(0);
long y = (long) Long_List.get(1);
long z = (long) Long_List.get(2);
System.out.println(x);
System.out.println(y);
System.out.println(z);
}
}
ArrayList
のようなコレクションフレームワークを操作しているときに、ArrayList
リスト要素をプリミティブ型の変数に割り当てようとすると、コンパイラはボックス化解除を実行します。出力を参照してください:
230
340
450
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook