如题,然后修改第一个list中对象的属性,那么第二个list中的对象的属性也会跟着变化吗?
如果是这样,怎么才能复制一个全新的对象到新list中呢,互不影响的
List<String> firstList = new ArrayList<>();
firstList.add("1");
firstList.add("2");
firstList.add("3");
List<String> secondList = new ArrayList<>(firstList);
firstList.add(0,"4");
System.out.println("firstList:"+firstList.get(0));
System.out.println("secondList:"+secondList.get(0));
输出结果:
firstList:4
secondList:1
针对这个问题,首选要搞懂对象引用的含义。
list l = new ArrayList();
l是分配在堆栈上的对象引用,它指向了堆中new ArrayList()对象所在的内存空间。
如果你的第二个list声明为list l2 = l1; 那么这两个对象引用就指向了同一个ArrayList对象,因此用第一个list引用改变实际对象后,再用第二个list访问实际对象时会发现它已经改变。
为了让你一个list引用改变实际对象后不会影响到第二个list引用的访问,可以两个list引用指向不同的对象。即把第一个list引用指向的对象复制一份成为一个新的对象,第二list引用指向这个新的对象。
综上,list l2 = new ArrayList(l1);
可查看链接:https://blog.csdn.net/qq_51964209/article/details/122734075?spm=1001.2014.3001.5502
对象内存地址相同,去改变当前对象的属性,那么肯定是相同的,除非你将2个内存地址不相同的对象赋值到不一样的list中