对象和对象引用

每天都在变化,每天都在进步

本篇博客从例子出发讲解对象和对象引用的关系


  1. 基础情况

    
    A a=new A();
    
    A a; //创建了个A 类型的引用a,此时指向null
    
    new A(); //在堆中创建了一个类A的对象,返回其引用地址
    
    = //将对象的地址给予引用
    

  2. 情景1

    A a=new A(); //(01)
    A b=a;//(02)
    a=null;//(03)

    此时b仍然有数据,因为(02)的时候,发生了复制行为,引用发生了复制,也就是此时a,b 同时指向了(01)的时候创建的对象,此时即使执行了(03),原有的内容仍在,b的引用仍然在。


  3. 情景2

    public void test(A test){
    test=new A();
    }
    
    A a=new A();//(01)
    test(a); //(02)
    

    结论: (01)步骤的a引用仍是原来的,并没因为(02 )发生变化,因为方法传参的时候也发生了引用的复制,所以此时(02),对第二个test引用进行了修改并不影响(01)的内容


  4. 情景3

    public void test(A test){
    test.setB("dd");
    }
    
    A a=new A();//(01)
    test(a); //(02)
    

    结论:此时a的引用对象内容改变,因为引用和复制后的引用都指向相同的对象,此时会发生变化


  5. 情景4

    对于List、Map 是等同的

    A a=new A();
    List<A> test=new ArrayList<>();
    test.add(a);
    a=null;  

    结论:这个情况和情景2类似,发生了方法传参

总结:对于对象引用来说 “=” 和传参会导致引用复制,此时就相当于多个引用对应于一个对象,此时其中的一个引用更换引用或者设置为null并不会影响其他的引用,如果修改了对象,则对于所有引用,其内容都是一致的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值