java中赋值时候,引用和重新创建的问题
今天遇到的问题是赋值问题,或者可以说是覆盖问题
直接上代码
public static void main(String[] args) {
List<Integer> finalTmp = Arrays.asList(1, 2, 3);
// 第一种方式:创建一个新的列表
List<Integer> tmpList1 = new ArrayList<>(finalTmp);
for (int i = 0; i < tmpList1.size(); i++) {
int newValue = tmpList1.get(i) + 1;
tmpList1.set(i, newValue);
}
System.out.println(tmpList1); // 输出:[2, 3, 4]
System.out.println(finalTmp); // 输出:[1, 2, 3]
// 第二种方式:直接使用原始列表的引用
List<Integer> tmpList2 = finalTmp;
for (int i = 0; i < tmpList2.size(); i++) {
int newValue = tmpList2.get(i) + 1;
tmpList2.set(i, newValue);
}
System.out.println(tmpList2); // 输出:[2, 3, 4]
System.out.println(finalTmp); // 输出:[2, 3, 4]
}
-
List tmpList1 = new ArrayList<>(finalTmp);
这行代码创建了一个新的ArrayList对象,并将finalTmp作为初始容量传递给构造函数。这意味着tmpList现在是一个独立的列表,与finalTmp没有直接关联。对tmpList的任何修改都不会影响finalTmp,反之亦然。
-
List tmpList2 = finalTmp;
这行代码只是创建了一个新的引用tmpList,指向与finalTmp相同的列表。这意味着tmpList和finalTmp实际上是指向同一个列表的引用。对tmpList的任何修改都会直接影响finalTmp,因为它们都指向同一个列表。
这种问题有时候会造成我们项目的bug,用错了,比如在循环赋值问题上,最后一次循环赋值的集合会覆盖掉之前的,因为用的是同一个引用,所以要注意哈!!!