模擬問題に挑戦!
では、今回解説したことの理解度を確認するため、4問の模擬問題に挑戦してみましょう。
問題1
以下のコードを、コンパイル、実行した場合、正しい解答はどれですか?
■Sample4.javaclass Foo { int num; } public class Sample4 { public static void main(String[] args) { Foo obj = new Foo(); obj.num = 10; bar(obj); System.out.println(obj.num); } public static void bar(Foo obj) { obj.num = 100; } }
- A. 「0」が出力される
- B. 「10」が出力される
- C. 「100」が出力される
- D. コンパイルエラーとなる
解答・解説
6行目でインスタンス化したFoo
オブジェクトに対し、7行目では「10
」を格納しています。そして、8行目で、bar()
メソッドの引数にこのオブジェクトを指定しています。参照型の変数を引数に指定しているので、参照情報のコピーとなります。つまり、main()
メソッド側とbar()
メソッド側では、同じFoo
クラスのオブジェクトを参照することになります。
12行目でnum
変数に100
を格納しているため、9行目では「100
」が出力されます。
〔正解:C〕
問題2
以下のコードを、コンパイル、実行した場合、正しい解答はどれですか?
■Sample5.javaclass Foo { int num; } public class Sample5 { public static void main(String[] args) { Foo obj1 = new Foo(); Foo obj2 = obj1; obj1.num = 100; obj2.num = 200; System.out.println(obj1.num); } }
- A. 「100」が出力される
- B. 「200」が出力される
- C. 「300」が出力される
- D. コンパイルエラーとなる
解答・解説
6行目では、Foo
クラスのインスタンス化を行っていますが、7行目はobj2
変数にobj1
変数を代入しているので、インスタンス化は行われません。これも参照情報のコピーとなります。つまり、obj1
変数とobj2
変数は同じオブジェクトを参照しています。8行目でnum
変数に「100
」を代入していますが、9行目で「200
」を代入することで、num
変数が「200
」に上書きされます。
〔正解:B〕