クラスとメソッド比較問題

Javaにおける「インスタンス変数」と「ローカル変数」の違いとして正しいものはどれですか?

A.インスタンス変数はメソッド内で宣言され、ローカル変数はクラス直下で宣言される
✗ 逆です。インスタンス変数はクラス直下で宣言され、ローカル変数はメソッド内で宣言されます。
B.インスタンス変数はクラス内で宣言されてオブジェクトごとに存在し、ローカル変数はメソッド内で宣言されてメソッド実行中のみ存在する← 正解
✓ 正解です。インスタンス変数はクラスレベルで宣言されてオブジェクト生成時に初期化され、ローカル変数はメソッド内で宣言されてメソッド実行終了時にスコープを抜けます。
C.インスタンス変数はメモリに常に保持され、ローカル変数は使用されないと自動削除される
✗ スコープが異なるため、ローカル変数も使用中はメモリに保持されます。自動削除はガベージコレクションの対象になるという意味では正しいですが、「使用されない」という条件が曖昧です。
D.インスタンス変数はstaticキーワードで定義でき、ローカル変数は定義できない
✗ インスタンス変数はstaticで定義することはできます(その場合クラス変数になる)。ローカル変数もstaticで定義することはできません(構文エラー)。

Oracle Certified Java Programmer, Bronze SE の問題一覧