AI作成・独立検証済(有資格者監修なし)1Z0-815 対応
var(配列・拡張for文における型推論)難易度 標準無料

次のコードの出力として正しいものを選べ。

1  public class Q17 {
2      public static void main(String[] args) {
3          var arr = new int[]{1, 2, 3};
4          for (var v : arr) {
5              System.out.print(v + " ");
6          }
7      }
8  }
  1. A1 2 3 (末尾に半角スペース1個)
  2. Bコンパイルエラー(varint[] のような基本型配列には使用できない)
  3. Cコンパイルエラー(拡張for文の変数に var は使用できない)
  4. D123(区切りのスペース無し)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

var は配列型の変数にも使える。3行目 var arr = new int[]{1, 2, 3}; では、初期化式 new int[]{1, 2, 3} の型が int[] であることから、 arr の型はint[] と推論される。

4行目の拡張for文 for (var v : arr) でも var が使え、arr の要素型 int から v の型はint と推論される。

ループは arr の要素 1, 2, 3 を順に v へ束縛し、System.out.print(v + " ") を3回実行する。 出力は 1 2 3 (各数値の後に半角スペースが1つ付き、末尾にもスペースが1つ残る)。

各誤答が違う理由
  • Bvar はプリミティブの配列型にも使用できる。初期化式 new int[]{1, 2, 3} から int[] として正しく推論されコンパイルは通る。
  • C拡張for文の変数宣言にも var は使用可能。arr の要素型 int から v の型が推論されコンパイルは通る。
  • Dprint(v + " ") は各値の後に半角スペースを明示的に連結して出力している。スペース無しで詰めて出力されるわけではない。
ひっかけ:var は基本型(int等)の配列には使えず参照型限定」という思い込みが罠。var の対象はローカル変数の"型"すべてであり、int[] のようなプリミティブ配列や拡張for文の要素変数にも問題なく使える。
コマンド例と想定される挙動(未実行)
出力:
1 2 3
(末尾に半角スペース1個。改行なし)
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
データ型 を含む問題を分野別に演習できます。
演習する →