はじめに
Javaを学習していると、
int
double
boolean
などのプリミティブ型を使う機会がたくさんあります。
しかしある日、
Integer
Double
Boolean
という見慣れない型が登場し、
「intがあるのにIntegerって何?」
と思ったことはありませんか?
私も最初は、
「同じ数字を扱うならintだけで十分では?」
と思っていました。
今回はJavaのラッパークラスについて、初心者向けに整理してみます。
結論:ラッパークラスとは?
ラッパークラス(Wrapper Class)とは、
プリミティブ型をオブジェクトとして扱うためのクラス
です。
例えば、以下のように対応しています
| プリミティブ型 | ラッパークラス |
|---|---|
| int | Integer |
| double | Double |
| boolean | Boolean |
| char | Character |
そもそもプリミティブ型とは?
Javaには大きく分けて2種類のデータ型があります。
プリミティブ型
値そのものを保持する型です。
int age = 20;
double price = 100.5;
boolean flag = true;
代表的なものは次の8種類です。
- byte
- short
- int
- long
- float
- double
- char
- boolean
プリミティブ型は処理が高速で、Javaプログラムの基本となる型です。
参照型
オブジェクトを扱う型です。
例えば、
String name = "Taro";
のStringは参照型です。
オブジェクトとして扱われるため、さまざまな機能を利用できます。
ラッパークラスはなぜ必要なの?
ここが一番重要な点になります!!
例えば次のコードを書いたとします。
List<int> numbers = new ArrayList<>();
しかしこれはコンパイルエラーになります。
なぜなら、
List
にはオブジェクトしか格納できないからです。
そのため、
List<Integer> numbers = new ArrayList<>();
と書く必要があります。
numbers.add(10);
numbers.add(20);
numbers.add(30);
このように、Integerを使うことで数字をListに格納できます。
Integerは実際には何が入っているの?
例えば、
Integer num = 100;
と書くと、
内部ではIntegerオブジェクトが生成されています。
つまり、
int num = 100;
num
↓
100
は単なる数値ですが、
Integer num = 100;
# Integer num = Integer.valueOf(100);
num
↓
Integerオブジェクト
┌─────┐
│100 │
└─────┘
は数値を持つオブジェクトです。
※
numの中に100が入っているのではなく、
100を持っているIntegerオブジェクトを指している
ラッパークラスだから使える便利な機能
ラッパークラスはオブジェクトなので、便利なメソッドが利用できます。
例えば文字列を数値へ変換する場合。
String str = "100";
int num = Integer.parseInt(str);
System.out.println(num);
実行結果
100
実務でも頻繁に登場するコードです。
オートボクシングとは?
Javaでは、
Integer num = 100;
と書くことができます。
本来なら、
Integer num = Integer.valueOf(100);
と書く必要があります。
しかしJavaが自動的に変換してくれます。
これを
オートボクシング
と呼びます。
逆に、
Integer num = 100;
int value = num;
のように自動でプリミティブ型へ戻すことを
アンボクシング
と呼びます。
覚え方
最初は次のように覚えておけば十分です。
- int → 数字そのもの
- Integer → 数字を持ったオブジェクト
そして、
- Listに入れるとき
- メソッドの機能を使いたいとき
にラッパークラスが必要になります。
まとめ
今回学んだことを整理します。
- ラッパークラスはプリミティブ型をオブジェクトとして扱うためのクラス
- intにはInteger、doubleにはDoubleが対応している
- ListやSetにはプリミティブ型を直接格納できない
- Integerなどのラッパークラスを利用する
- Javaにはオートボクシング機能があり自動変換してくれる
私自身、最初は「intがあるのにIntegerが存在する理由」が分かりませんでした。
しかし、コレクションや実務コードを触るようになると、ラッパークラスは頻繁に登場します。
まずは
「Integerは数字を持ったオブジェクト」
と覚えておくと理解しやすいと思います。
