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

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

下面给一个例子

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

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

转载于:https://www.cnblogs.com/WhatMu/p/7066898.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值