对象的真相——对象给另一个对象赋值产生的误会


对象给另一个对象赋值,并没有产生新的对象,只是产生了新的对象的引用,两个对象共用同一块内存空间,只是引用不同。

下面给一个例子

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的回收机制会处理的。

  最后,代码里的变量名用的中文,只是觉得好玩,希望大家不要模仿。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM