AI作成・AIで再検証済(有資格者監修なし)1Z0-815-JPN 対応
var(ローカル変数型推論の制約)難易度 高無料

var(ローカル変数型推論)に関する次の4つの記述のうち、正しいものをすべて選べ。

A  var は初期化子を省略した宣言(値を代入せずに宣言だけする)には使えない。
B  var はインスタンスフィールドの型としても使用できる。
C  var で宣言した変数の型は初期化式からコンパイル時に確定し、以降に別の型の値を代入することはできない。
D  var x = null; のように null だけを初期化子にして変数を宣言できる。
  1. Avar は初期化子を省略した宣言(値を代入せずに宣言だけする)には使えない。
  2. Bvar はインスタンスフィールドの型としても使用できる。
  3. Cvar で宣言した変数の型は初期化式からコンパイル時に確定し、以降に別の型の値を代入することはできない。
  4. Dvar x = null; のように null だけを初期化子にして変数を宣言できる。
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A・CAI作成・AIで再検証済

解説

var(Java 10〜・ローカル変数型推論)は「型を書かなくてよい」だけであり、あくまで静的型付けの範囲内で使われる点が最大の注意点。

  • A:正しい。var は初期化子から型を推論するため、宣言と同時の初期化が必須。var x;(初期化子無し)はコンパイルエラー。
  • B:誤り。var が使えるのはローカル変数(メソッド内・forの初期化子・try-with-resources等)のみ。フィールド・メソッドの引数・戻り値の型には使えない。
  • C:正しい。var は動的型付けではない。コンパイル時に初期化式から具体的な型(例:String)が確定し、以降はその型の変数として扱われる(別の型の値を代入すれば通常の型不一致エラーになる)。
  • D:誤り。null 単体からは推論すべき具体的な型が存在しないため、var x = null; はコンパイルエラーになる(var x = (String) null; のように明示すれば型が定まり可)。

したがって正しいのは A・C。

各誤答が違う理由
  • Bvar はローカル変数専用の機能。インスタンスフィールド・メソッド引数・戻り値の型に使うとコンパイルエラー「var is not allowed here」になる。
  • Dnull 単体からは推論できる具体的な型が存在しないため、var x = null; はコンパイルエラーになる。明示的なキャスト(例:(String) null)があれば可能。
ひっかけ: 「var は型を書かない=どんな用途にも自由に使える動的型付け」という誤解が最大の罠。実際はローカル変数限定・初期化子必須・推論後は静的に型固定という3制約があり、B・D はまさにその制約に反する典型例。
コマンド例と想定される挙動(未実行)
A・C:正しい記述(コンパイル時挙動として確認可能)。
B:フィールドに var を使うとコンパイルエラー「var is not allowed here」。
D:var x = null; はコンパイルエラー「cannot infer type for local variable x(variable initializer is 'null')」。
AIが作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

この問題集の作り方

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