Java でのオートボクシングとアンボクシング

Sheeraz Gul 2023年10月12日
  1. Java での自動ボクシング
  2. Javaでのアンボックス
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つあります。

  1. どのメソッドでも、プリミティブデータ型をパラメーターとして渡す必要があります。そのメソッドには、対応するラッパークラスオブジェクトが必要です。
  2. 対応するラッパークラスを持つ変数にプリミティブデータ型を割り当てている間。
  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 でのボックス化解除は、ラッパークラスのオブジェクトを同じプリミティブデータ型に変換します。これは、オートボクシングの反対の操作です。たとえば、Integerint に、または Longlong に変換すると、前のテーブルをボクシングに使用することもでき、その逆も可能です。

また、アンボクシングは以下の3つのケースで適用できる。

  1. ラッパークラスのオブジェクトを、プリミティブ型の値を必要とするメソッドに渡している間。
  2. ラッパークラスオブジェクトが対応するプリミティブ変数に割り当てられている場合。
  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 Gul
Sheeraz Gul avatar Sheeraz Gul avatar

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