ホーム > Java | プログラム > JavaのInteger等のプリミティブ型ラッパクラスには要注意!

JavaのInteger等のプリミティブ型ラッパクラスには要注意!

Check

基本的なことだけど、Javaには、プリミティブ型とオブジェクト型がある。
プリミティブ型とは、boolean, int, long, double, floatとか。
それに対応するように、Boolean, Integer, Long, Double, Floatクラスがある。

これらのプリミティブ型とオブジェクト型、何が一番違うかというと、nullが入るかどうか(表現が変だけど)。
つまり、

int a = null; //コンパイルエラー
Integer b = null; //OK

ということだ。

あと、よく使われるのが、

List<Integer> list = new ArrayList<Integer>();
list.add(1);

for (int i : list) {
	System.out.println("i=" + i);
}

といったように、Collectionに数値を入れたい場合に使う。
JDK1.4以降からの機能で、プリミティブ型の変数にオブジェクト型のオブジェクトをコード上はそのまま入れられるようになった。
しかし、ここで注意!

最初に言ったように、Integerには、nullが入る。
けど、intにはnullは入らない。
なので、この例の場合、listというArrayListに、nullが入っている場合、
for文のところで、NullPointerExceptionが発生する。
このパターンで、NullPointerExceptionが発生した場合、
debug等で見つけるのがちょっとわかりにくい。
もしくは、Collectionから取り出したInteger等の変数を、
プリミティブ型の引数を持ったメソッドに渡した場合なども、
どこでNullPointerExceptionが発生しているのか、発生源を特定するのが難しいのだ。

アタリマエのことなのだけど、
あまり気にしてないとハマるので、覚書。

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
http://www.suekichi.org/blog/2010/11/java_premitive/trackback/
トラックバックの送信元リスト
JavaのInteger等のプリミティブ型ラッパクラスには要注意! - SUEKICHI.org より

ホーム > Java | プログラム > JavaのInteger等のプリミティブ型ラッパクラスには要注意!

Tag cloud
Amazon
いろいろ

ページの上部に戻る