对象变量的赋值和你直觉期望的不同。例如,你认为下面的程序段是做什么呢? 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仍然指向原来的对象。 注意:当你将一个对象引用赋值给另一个对象引用时,你并没有创建该对象的一个拷贝,而是仅仅对引用的一个拷贝。
|