仰望星空_Star 2016-07-26 05:30 采纳率: 0%
浏览 1101
已采纳

JAVA关于引用的基础知识求教

         Sup s1=new Sup();//1
        s1.setId(1);
        List<Sup> s=new ArrayList<>();
        s.add(s1);
        System.out.println(s);
        s1=new Sup();//2
        s1.setId(111);
        System.out.println(s);

代码中两次输出结果是一样的?为什么注释掉2处的代码后结果又是不一样的?

  • 写回答

4条回答 默认 最新

  • little_how 2016-07-26 05:52
    关注

    因为s1一直持有者第一个对象的引用,
    在放入list后,堆内存中的对象被两处地方引用,一个是list的s一个是对象的s1.
    这时候s1改变值就会改变掉list中的引用。
    但是当执行s1 = new Sup()的时候,s1的引用就被改变了,
    那么s1.setId(111)改变的就是第二个堆内对象的值,因为s1指向了第二个对象。
    那么list里的对象的引用就只被list引用了。

    如果有帮助,希望采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题