对一个对象进行操作时,我们真正操作的是对对象的引用,所以倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一个地方,如果c=d,那么c和d都指向原本只有d指向的那个对象,实例如下
public class Assignment { public static void main(String[] args){ Tank t1 = new Tank(); Tank t2 = new Tank(); t1.level = 9; t2.level = 47; System.out.println("t1.level = " + t1.level + "; t2.level = " + t2.level); t1 = t2; System.out.println("t1.level = " + t1.level + "; t2.level = " + t2.level); t1.level = 27; System.out.println("t1.level = " + t1.level + "; t2.level = " + t2.level); } } class Tank{ int level; } 输出结果: t1.level = 9; t2.level = 47 t1.level = 47; t2.level = 47 t1.level = 27; t2.level = 27
Tank类非常简单,他的两个实例是在main里创建的,对每个Tank类的对象的level都赋予了一个不同的值,然后将t2赋值给t1,接着又修改了t1,但是由于赋值操作的是一个对象的引用,所以修改t1的同时,也改变了t2,这是由于t1和t2包含的是相同的引用,他们指向相同的对象,为了避免这种问题,我们在赋值的时候可以这样写:t1.level = t2.level,这样便可以保持两个对象相互独立
原文:https://www.cnblogs.com/kavins/p/14477289.html