对象变量的赋值和你直觉期望的不同。例如,你认为下面的程序段是做什么呢?
Box b1 = new Box();
Box b2 = b1;
你可能认为,变量b2被赋值为变量b1对象引用的一个拷贝。也就是,你可能认为b1和b2引用的是不同的对象,但实际情况却相反,b1和b2将引用同样的对象。将b1赋值给b2并没有分配任何内存或对原对象做任何部分的拷贝。由于它们是同一个对象,因此通过变量b2对对象的改变也将影响b1所对应的对象。
尽管b1和b2都引用同一个对象,但是他们之间没有任何其他的关系。例如,接下来对b1的赋值仅仅使b1脱离(unhook )初始对象,而没有影响对象或影响b2。
Box b1 = new Box();
Box b2 = b1;
// ...
b1 = null;
这里,b1被设置为空,但是b2仍然指向原来的对象。
注意:当你将一个对象引用赋值给另一个对象引用时,你并没有创建该对象的一个拷贝,而是仅仅对引用的一个拷贝。