Java Silver試験対策として、クラスの宣言とインスタンスのライフサイクルに関する問題に挑戦しましょう。
問題
次のプログラムを実行するとどのような出力が得られるでしょうか。正しい選択肢を選んでください。
class Car {
String brand;
Car(String brand) {
this.brand = brand;
}
void displayBrand() {
System.out.println(this.brand);
}
}
public class Main {
public static void main(String[] args) {
Car car1 = new Car("Toyota");
Car car2 = car1;
car1.displayBrand();
car2.brand = "Honda";
car1.displayBrand();
}
}
選択肢
- A. Toyota, Honda
- B. Toyota, Toyota
- C. コンパイルエラー
- D. 実行時エラー
答えと解説
回答を見る
答え
A. Toyota, Honda
解説
解説のポイント:
- オブジェクトの参照と参照のコピー
- 同じオブジェクトを指す複数の参照
Javaでは、クラスのインスタンスはオブジェクトとしてメモリに配置され、変数はこのオブジェクトを指す参照を保持します。
このプログラムでは、car1
は”Toyota”というブランドのCar
オブジェクトを参照しています。そしてcar2
にcar1
を代入することで、car2
も同じCar
オブジェクトを参照します。
car2.brand = "Honda";
という行でcar2
を通じてブランドを”honda”に変更すると、同一オブジェクトを示すcar1
も影響を受け、ブランドが更新されます。結果として、2回のdisplayBrand
メソッド呼び出しは”Toyota”と”Honda”を出力します。
このように、オブジェクトの参照を理解することは、オブジェクトや変数操作の基礎となります。