ObLocateMain main = new ObLocateMain();
List mainList = new ArrayList();
mainList.add(main);
main.setOutboundNo("111111111111");
main = new ObLocateMain();
main.setOutboundNo("222222222222");
mainList.add(main);
mainList.get(0).setOutboundNo("333333333333");
System.out.println("---------------------------------");
上面的代码现在有个问题不能理解
给outboundNO对象赋值后,集合里的main对象应该也有值了(这可以理解)
main = new ObLocateMain(); 之后,按照我的理解集合里的main对象应该也是一个新的new的一个对象,但是实际上集合里对象还是之前的main对象(给outboundNo赋值后的对象)
这是为什么呢,集合归根结底还是维护的数组,我理解的是将main这个引用指向一个新的对象的时候为什么集合里的没有变化呢,集合里main的引用和外面的不是一个吗?
上述过程如果不是集合的话,你的程序相当于:
ObLocateMain main = new ObLocateMain();
main.setOutboundNo("111");
ObLocateMain main2 = main;
main = new ObLocateMain();
main.setOutboundNo("222");
System.out.println(main2.getOutboundNo());
System.out.println(main.getOutboundNo());
针对你的程序
首先第一行你new ObLocateMain();这样在堆中有了一个ObLocateMain的实例i1。
这时这个main引用指向了i1.
第三行mainList.add(main);之后呢。
实际上是ArrayList中的数组中的一个元素赋值为i1的引用
elementData[size++] = e -->i1;
然后呢,第五行main = new ObLocateMain();
把main改为了到另外一个ObLocateMain实例i2的引用。
第七行把ArrayList中的下一个元素指向了i2.
执行完之后呢
elementData[0] 的值是包含了i1的引用
elementData[1] 的值是包含了i2的引用
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。