Javaエバンジェリストがお届けするホットな話題
5分でわかる今週のJava ホットトピック
月曜日 1 07, 2008
今週のクイズ(7) 解答編:何かと話題のBoxing・・・結果は?

去年出題した 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 が発生してしまうという結果になってしまいました。

http://blogs.sun.com/javaev/resource/mini-boxing_answer1.jpg

では、正しく実行させるためにはどのようなコードを書けばいいのかというと・・・
次のようなコードです。

integer != null && integer == i

このように書くと、integer が null でない場合だけ、式が評価されるようになりますね。

http://blogs.sun.com/javaev/resource/mini-boxing_answer2.jpg
ということで、今回のポイントです。
AutoBoxing が使えるからといって、基本データ型と同じような感覚で使っていると、思わぬエラーが発生するということですね。

http://blogs.sun.com/javaev/resource/mini-boxing_answer3.jpg
それでは、また次回。


投稿されたコメント:

コメント
コメントは無効になっています。
過去の記事
« 11月 2009
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  
       
今日
Click me to subscribeこのブログを購読する(RSS)
検索

リンク
 

Today's Page Hits: 21