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 }
- A
1 2 3(末尾に半角スペース1個) - Bコンパイルエラー(
varはint[]のような基本型配列には使用できない) - Cコンパイルエラー(拡張for文の変数に
varは使用できない) - D
123(区切りのスペース無し)
正解・解説・誤答理由・ひっかけを見る▼ 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つ残る)。
- B
varはプリミティブの配列型にも使用できる。初期化式new int[]{1, 2, 3}からint[]として正しく推論されコンパイルは通る。 - C拡張for文の変数宣言にも
varは使用可能。arrの要素型intからvの型が推論されコンパイルは通る。 - D
print(v + " ")は各値の後に半角スペースを明示的に連結して出力している。スペース無しで詰めて出力されるわけではない。
ひっかけ: 「
var は基本型(int等)の配列には使えず参照型限定」という思い込みが罠。var の対象はローカル変数の"型"すべてであり、int[] のようなプリミティブ配列や拡張for文の要素変数にも問題なく使える。コマンド例と想定される挙動(未実行)
出力: 1 2 3 (末尾に半角スペース1個。改行なし)
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)