Java:将属性从一个对象实例复制到另一个对象实例

u19*_*964 3 java reference object deep-copy shallow-copy

说你有

public class Car{
  private Engine m_eng;
  public Car(){

  }

  public Engine getEngine(){
    return m_eng;
  }

  public void setEngine(Engine engine){
    m_eng = engine;
  }
}

public class Engine{
  private String m_name;
  public Engine(){};
  public Engine(String name){ m_name = name;}

  public String getName(){
    return m_name;
  }
  public void setName(String name){
    m_name = name;
  }
}

public static void main(String[] args){
  Engine eng1 = new Engine("abc");
  Car car1 = new Car();
  car1.setEngine(eng1);
  Car car2 = new Car();
  car2.setEngine(car1.getEngine());
}
Run Code Online (Sandbox Code Playgroud)

问题:car1和car2的引擎是引用相同的Engine实例,还是当我这样做时car2.setEngine(car1.getEngine()),它会自动生成car1.getEnginer()的深层副本并设置为car2?

use*_*772 6

CAR 1 ---------------> ENG1

car2.setEngine(car1.getEngine());
Run Code Online (Sandbox Code Playgroud)

结果是

car1 ---------------> eng1 <------------------ car2

从而指向相同的引擎实例