Javaの認定資格「Oracle Certified Java Programmer, Gold SE 7」。通称JavaGoldのオリジナル問題を紹介していきたいと思います。
前回の解答
まずは、前回の解答から。
正解は「6.実行時エラーが発生する」となります。
問1と非常に似た問題となりますが、異なる点は3か所です。
- switchの条件判定に使われている変数xがインスタンス変数(属性)として定義されている。
- 同じく変数xがInteger型(オブジェクト参照型)として定義されている。
- default条件が一番上に記述されている。
変数xは属性として定義されていますので、自動的に初期化されることになります。その際に設定される初期値は基本データ型の場合は基本的にゼロ(もしくはfalse)、オブジェクト参照型の場合はnullとなります。
2点目のとおりこの変数xはオブジェクト参照型(Integer型)ですので、nullで初期化されていることになります。
ここまでわかって半分正解です。switchの条件式にnullがありませんのでdefaultが出力されるように思いますが、実はまちがいです。switchの条件判定に使用できるデータ型の中に「Integerは含まれていない」のです。この場合、オートアンボクシングによりIntegerがintに変換され、intとして条件判定されることになります。しかし、前述したとおり変数xにはnullが入っていますので、intに変換することができず実行時例外NullPointerExceptionが発生することになります。
また、switch文のdefaultは一番下に記述することが一般的ですが、このように一番上に書いても問題ありません。合わせて覚えておきましょう。
問3
数値リテラルに関する以下の説明のなかで間違っている選択肢を選んでください。
- 整数リテラルは10進数、8進数、16進数を使用することができる。
- 8進数を表したい場合は1文字目に0(ゼロ)を付ける。
- 16進数を表したい場合は先頭に0x(ゼロエックス)を付ける。
- JavaSE7からは、整数リテラルを扱う際に「_」(アンダースコア)を使用することができるようになった
- 整数リテラルに使用するアンダースコアはリテラルの先頭や末尾、記号の前後に使用することができない
解答・解説・問4はこちら