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处的代码后结果又是不一样的?
因为s1一直持有者第一个对象的引用,
在放入list后,堆内存中的对象被两处地方引用,一个是list的s一个是对象的s1.
这时候s1改变值就会改变掉list中的引用。
但是当执行s1 = new Sup()的时候,s1的引用就被改变了,
那么s1.setId(111)改变的就是第二个堆内对象的值,因为s1指向了第二个对象。
那么list里的对象的引用就只被list引用了。
如果有帮助,希望采纳
这应该你每次运行都不一样的啊,但是两次输出都是一样的啊
这里输出s是输出s在内存中的地址
不注释:s1被初始化过之后才打印了s,所以你s1的引用就变了,所以你打印结果相同;
注释后s1始终是那个引用地址 操作s1倒是s变