AI作成・AIで再検証済(有資格者監修なし)1Z0-815-JPN 対応
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コンパイルエラー(var は int[] のような基本型配列には使用できない)
  3. Cコンパイルエラー(拡張for文の変数に var は使用できない)
  4. D123(区切りのスペース無し)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・AIで再検証済

解説

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が作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

この問題集の作り方

  1. 問題と解説はAIが作成しています。この資格の問題に、有資格者(著者)の監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  5. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
データ型 を含む問題を分野別に演習できます。
演習する →