Java引用传递深入简出

Java中的值传递和引用传递:

对基本类型的数据进行操作:

由于原始内容和副本都是存储实际值,并且是在不同栈区,因此形参的操作,不影响原始内容。

对引用类型的数据进行操作,分两种情况:

一种是形参和实参保持指向同一个对象地址,则形参的操作,会影响实参指向的对象的内容。
一种是形参被改动指向新的对象地址(如重新赋值引用),则形参的操作,不会影响实参指向的对象的内容。


问题描述

之前项目中查询与现实数据不一致:

APP 中接收数据代码:

     public static void main(String[] args) {
        // 数据库参数 {1,2,3,4}
        List <Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        bugToList(list);
        // 输出` [1, 2, 5, 4]
        System.out.println(list);
    }

   
    public static void bugToList(List<Integer> list){
        List <Integer> bugList = list;
        bugList.set(2,5);
    }

原因分析:

主要原因是讲list全部赋值到bugList中了:

用我们语法来说就是:方法被调用时是传入的实际值,它在方法被调用前就已经被初始化并且在方法被调用时传入。


解决方案:

我们可以编写时候注意引用的从新赋值:

    public static void main(String[] args) {
        // 数据库参数 {1,2,3,4}
        List <Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        List <Integer> newList = new ArrayList<>();
        //   或者可以直接赋值     newList.addAll(list);
        //list拷贝到newList
        org.springframework.beans.BeanUtils.copyProperties(list, newList);
        bugToList(newList);
        // 输出` [1, 2, 3, 4]
        System.out.println(list);
    }

    public static void bugToList(List<Integer> list){
        List <Integer> bugList = list;
        bugList.set(2,5);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的头发哪去了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值