在赋值运算中,对象引用变量与基本类型变量(如int变量)的工作方式不同.当把一个基本类型的变量赋给另一个变量时,情况很简单.等号左边的变量接收等号右边变量值的副本.当把一个对象引用变量赋给其他对象引用变量时,情况就有些复杂,因为是在改变引用变量所引用的对象.这一不同可能导致出乎意料的结果.例如,考虑下面的代码段:
Vehicle car1 = new Vehicle(); Vehivle car2 = car1;
乍一看,很容易想到car1和car2引用的是不同的对象,但是情况并非如此.相反,car1和car2引用的是同一个对象.把car1赋给car2也指向car1指向的对象.因此,即可以通过car1也可以通过car2来操作对象.
尽管car1和car2都引用相同的对象,但他们之间是没有关系的,例如,下面对car2的赋值只是改变了car2所引用的对象:
Vehicle car1 = new Vehicle(); Vehivle car2 = car1; Vehicle car3 = new Vehicle(); car2 = car3;
在这一系列代码执行之后,car2和car3指向同一个对象.由car1引用的对象没有变化.