Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

Javaのまとめ記事です。

プリミティブ型、参照型

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

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

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

オートボクシング

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

Java
int numInt = 10;
Integer numInteger = numInt;

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

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

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

アンボクシング

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

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

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

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

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

気をつけたいこと

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

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

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

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

Eclipseでの設定

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

chihiro
jrits
信頼と魅力のある先進のITをもとに、お客様のワークスタイル・イノベーションの実現を目指します。
http://www.jrits.co.jp/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした