今日もJava Silverの学習を深めましょう。次のプログラムを考えてみてください。
問題
次のコードを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
class Car {
String color;
Car(String color) {
this.color = color;
}
}
public class Main {
public static void main(String[] args) {
Car car1 = new Car("Red");
Car car2 = new Car("Blue");
car1 = car2;
System.out.println(car1.color);
}
}
選択肢
- A. Red
- B. Blue
- C. コンパイルエラー
- D. 実行時エラー
答えと解説
回答を見る
答え
B. Blue
解説
解説のポイント:
- オブジェクトの参照と再割り当て
- メモリ内でのオブジェクトの状態
- ガベージコレクションについて
このJavaプログラムでは、最初に2つのCar
オブジェクトが生成され、それぞれのcolor
属性は”Red”と”Blue”に設定されます。
その後、car1 = car2;
とすることでcar1
の参照先がcar2
と同じCar
オブジェクトを指すようになります。
この状態でSystem.out.println(car1.color);
を実行するとcar1
は”Blue”のcolor
属性を持つCar
オブジェクトを参照しているため、出力は”Blue”になります。
不要になった”Red”を持つCar
オブジェクトは他から参照されていないのでガベージコレクションの対象になります。