133
128

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】オートボクシング、アンボクシング

Last updated at Posted at 2015-04-01

Javaのまとめ記事です。

プリミティブ型、参照型

Javaではプリミティブ型(基本型)と参照型の2つの型があります。
プリミティブ型は8つあります。
そして8つのプリミティブ型それぞれに、参照型であるラッパークラスが存在します。

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

このプリミティブ型とラッパークラスの変換を自動で行ってくれる仕組みがあります。
プリミティブ型からラッパークラスへの変換をオートボクシング、ラッパークラスからプリミティブ型への変換をアンボクシングといいます。

オートボクシング

プリミティブ型からラッパークラスへの自動変換をオートボクシングといいます。

int numInt = 10;
Integer numInteger = numInt;

int型で宣言されたnumIntをInteger型へ明示的に変換する必要がありません。

オートボクシングの機能を使わずに明示的に変換しようとすると以下のようになります。

int numInt = 10;
Integer numInteger = new Integer(numInt);
// または以下
Integer numInteger = Integer.valueOf(numInt);

アンボクシング

ラッパークラスからプリミティブ型への変換をアンボクシングといいます。

Integer numInteger = new Integer(10);
int numInt =  numInteger;

こちらも、Integer型で宣言されたnumIntegerを明示的にint型へ変換する必要がありません。

アンボクシングの機能を使わずに明示的に変換しようとすると以下のようになります。

Integer numInteger = new Integer(10);
int numInt =  numInteger.intValue();

気をつけたいこと

ラッパークラスは参照型のため、nullが入る可能性があります。
nullが入ったラッパークラスオブジェクトをアンボクシング機能を使ってプリミティブ型へ変換するとNullPointerExceptionが発生します。

Integer numInteger = null;
int numInt =  numInteger; //実行時にNullPointerException発生

int numInt = numInteger;のコードは実際は
int numInt = numInteger.intValue();です。
numIntegerがnullのため、NullPointerExceptionが発生してしまいます。

上記は簡単なコードですが、実際のプログラムでもこのようにnullが格納された変数をアンボクシング機能でプリミティブ型へ変換する可能性はあります。
気をつけないと思わぬバグが入り込んでしまうことがあります。

Eclipseでの設定

オートボクシング、アンボクシングに対して警告を出せます。
ウィンドウ>設定>Java>コンパイラー>エラー/警告>潜在的なプログラミングの問題>ボクシングおよびアンボクシング変換

133
128
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
133
128

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?