1
1

Javaのラッパークラスについて

Posted at

はじめに

Javaのラッパークラスは、基本データ型(プリミティブ型)をオブジェクトとして扱うためのクラスです。これらのクラスは、Javaのコアライブラリで提供されており、プリミティブ型をオブジェクトとして使用する必要がある場合に役立ちます。この記事では、ラッパークラスの概要、各ラッパークラスの説明、使用方法、オートボクシングとアンボクシング、そしてラッパークラスの利点と欠点について見ていきます。

ラッパークラスの概要

Javaには、次の基本データ型があります:

  • byte
  • short
  • int
  • long
  • float
  • double
  • char
  • boolean

これらの基本データ型には、それぞれ対応するラッパークラスがあります:

プリミティブ型 ラッパークラス
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

ラッパークラスは、これらのプリミティブ型をオブジェクトとして扱うためのクラスであり、次のような用途があります:

  • プリミティブ型の値をコレクション(例えば、ArrayList)に格納する
  • プリミティブ型の値をオブジェクトとして扱い、メソッドの引数や戻り値として使用する
  • プリミティブ型の値を文字列に変換したり、文字列からプリミティブ型の値に変換する

各ラッパークラスの詳細

Byte クラス

  • 説明: byte 型のラッパークラス
  • 範囲: -128 ~ 127
  • サイズ: 1バイト
  • 使用例:
Byte byteObj = Byte.valueOf((byte) 10);
byte primitiveByte = byteObj.byteValue();

Short クラス

  • 説明: short 型のラッパークラス
  • 範囲: -32,768 ~ 32,767
  • サイズ: 2バイト
  • 使用例:
Short shortObj = Short.valueOf((short) 100);
short primitiveShort = shortObj.shortValue();

Integer クラス

  • 説明: int 型のラッパークラス
  • 範囲: -2^31 ~ 2^31 - 1
  • サイズ: 4バイト
  • 使用例:
Integer intObj = Integer.valueOf(1000);
int primitiveInt = intObj.intValue();

Long クラス

  • 説明: long 型のラッパークラス
  • 範囲: -2^63 ~ 2^63 - 1
  • サイズ: 8バイト
  • 使用例:
Long longObj = Long.valueOf(10000L);
long primitiveLong = longObj.longValue();

Float クラス

  • 説明: float 型のラッパークラス
  • 範囲: ±3.40282347E+38F
  • サイズ: 4バイト
  • 使用例:
Float floatObj = Float.valueOf(10.5f);
float primitiveFloat = floatObj.floatValue();

Double クラス

  • 説明: double 型のラッパークラス
  • 範囲: ±1.79769313486231570E+308
  • サイズ: 8バイト
  • 使用例:
Double doubleObj = Double.valueOf(10.5);
double primitiveDouble = doubleObj.doubleValue();

Character クラス

  • 説明: char 型のラッパークラス
  • 範囲: 0 ~ 65,535
  • サイズ: 2バイト
  • 使用例:
Character charObj = Character.valueOf('a');
char primitiveChar = charObj.charValue();

Boolean クラス

  • 説明: boolean 型のラッパークラス
  • 範囲: true または false
  • サイズ: 1ビット
  • 使用例:
Boolean booleanObj = Boolean.valueOf(true);
boolean primitiveBoolean = booleanObj.booleanValue();

オートボクシングとアンボクシング

Java 5 以降、Javaはプリミティブ型とラッパークラスの間の自動変換(オートボクシングとアンボクシング)をサポートしています。

オートボクシング

オートボクシングは、プリミティブ型を自動的に対応するラッパークラスに変換する機能です。例えば、int 型の値を Integer 型のオブジェクトに自動的に変換します。

Integer intObj = 10; // オートボクシング

アンボクシング

アンボクシングは、ラッパークラスのオブジェクトを自動的に対応するプリミティブ型に変換する機能です。例えば、Integer 型のオブジェクトを int 型の値に自動的に変換します。

int primitiveInt = intObj; // アンボクシング

オートボクシングとアンボクシングの例

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> intList = new ArrayList<>();
        
        // オートボクシング
        intList.add(10);
        intList.add(20);
        intList.add(30);
        
        // アンボクシング
        int sum = 0;
        for (Integer num : intList) {
            sum += num;
        }
        
        System.out.println("Sum: " + sum); // 出力: Sum: 60
    }
}

ラッパークラスの利点と欠点

利点

  1. コレクションの使用: Javaのコレクションフレームワークはオブジェクトを扱うため、ラッパークラスを使用することでプリミティブ型の値をコレクションに格納できます。
  2. メソッドの使用: ラッパークラスには、多くのユーティリティメソッドが提供されており、これらを使用してプリミティブ型の値を操作できます。
  3. オブジェクトの必要性: 一部のJava APIはオブジェクトを要求するため、ラッパークラスを使用することでこれらのAPIを利用できます。

欠点

  1. オーバーヘッド: ラッパークラスはプリミティブ型よりも多くのメモリを消費し、パフォーマンスが低下する可能性があります。
  2. ボクシングとアンボクシングのコスト: オートボクシングとアンボクシングには若干のパフォーマンスオーバーヘッドが伴います。
  3. ヌルポインタ例外: ラッパークラスのオブジェクトがヌルである場合、アンボクシング時に NullPointerException が発生する可能性があります。

まとめ

Javaのラッパークラスは、基本データ型をオブジェクトとして扱うためのクラスであり、コレクションフレームワークの使用やAPIとの互換性を提供します。オートボクシングとアンボクシングによって、プリミティブ型とラッパークラスの間の変換が簡単に行えるようになっています。しかし、ラッパークラスの使用にはメモリオーバーヘッドやパフォーマンスの低下などの欠点もあるため、適切な状況で使用することが重要です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1