java中赋值时候,引用和重新创建的问题

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,用错了,比如在循环赋值问题上,最后一次循环赋值的集合会覆盖掉之前的,因为用的是同一个引用,所以要注意哈!!!

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值