Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
107
Help us understand the problem. What are the problem?
@chihiro

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

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>コンパイラー>エラー/警告>潜在的なプログラミングの問題>ボクシングおよびアンボクシング変換

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
107
Help us understand the problem. What are the problem?