对象给另一个对象赋值,并没有产生新的对象,只是产生了新的对象的引用,两个对象共用同一块内存空间,只是引用不同。
下面给一个例子
public class 测试 { public String 属性; public 测试(String 属性){ this.属性 = 属性; } public String get属性() { return 属性; } public void set属性(String 属性) { this.属性 = 属性; } }
public class Main { public static void main(String[] args) { 测试 a = new 测试("1"); 测试 b= a; b.set属性("2"); System.out.println("a的值:"+a.get属性()+",b的值:"+b.get属性()); } }
输出结果:a的值:2,b的值:2
开发中遇到了类似的情况,如果b=a语句,只是把a复制一份,给了b,那么改变b的值,应该不影响a的值啊,但是这里影响到了。得出结论,b=a,只是把a的引用赋值给了b,现在ab两个对象,公用同一块内存地址。
但是我又想,如果创建对象b的时候用了new关键字,那不是开辟新的一块内存了吗,这时候b不会影响a了吧。
实验如下:
public class Main { public static void main(String[] args) { 测试 a = new 测试("1"); 测试 b = new 测试(""); b = a; b.set属性("2"); System.out.println("a的值:"+a.get属性()+",b的值:"+b.get属性()); } }
输出结果:a的值:2,b的值:2
结果和刚才一样,b是开辟了新的内存空间,创建了一个新的空对象,但是执行了b = a语句之后,b又重新指向了a的对象,刚才那个空对象就没有引用指向它了,至于这个空对象怎么样了,java的回收机制会处理的。
最后,代码里的变量名用的中文,只是觉得好玩,希望大家不要模仿。