去年出題した Autoboxing の問題の解答を掲載します! (長い間お待たせしてしまってすみません・・・)
まずは問題の復習から。
public class Boxing {
static int i;
static Integer integer;
public static void main(String[] args) {
System.out.println(integer == i);
}
}
というようなコードでした。さて、このプログラムの結果は以下のどれでしょうか?
- 1) true
- 2) false
- 3) 実行時例外が発生する
- 4) コンパイルエラーになる
という問題でした。わかりましたか?
それでは、解答をみていきましょう。
正解は・・
3 の「実行時例外が発生する」でした。
どうしてエラーになってしまうのでしょう?
integer == i の計算式は、実行時に integer.intValue() == i というように変換されます。そうすると、integer は明示的に初期化されていないので、ポインタは null となっています。そのため、NullPointerException が発生してしまうという結果になってしまいました。

では、正しく実行させるためにはどのようなコードを書けばいいのかというと・・・
次のようなコードです。
integer != null && integer == i
このように書くと、integer が null でない場合だけ、式が評価されるようになりますね。

ということで、今回のポイントです。
AutoBoxing が使えるからといって、基本データ型と同じような感覚で使っていると、思わぬエラーが発生するということですね。

それでは、また次回。