使用=号跨方法进行赋值 出现的对象浅拷贝失效的问题

问题:使用等号对对象进行赋值之后,发现再用时值未赋值过来

原因:浅拷贝作用域问题

 public static void main(String[] args) {
 		 //创建ab两个对象
        ArrayList<String> a = new ArrayList<>(); //ArrayList@477
        ArrayList<String> b = new ArrayList<>(); //ArrayList@478
		//对a赋值
        a.add("aaa");
        
        ArrayList<String> copy = copy(a, b); //ArrayList@477
        System.out.println("copy = " + copy);
        //此处拿到的b的地址根据就近原则还是原来创建时的地址
        System.out.println("b = " + b); //ArrayList@478
        a.add("ddd");
        System.out.println("b = " + b);
    }

    public static ArrayList<String> copy(ArrayList<String> a, ArrayList<String> b) {
    //b引用a的地址 (浅拷贝)
        b = a;
        return b;// ArrayList@477
    }

解决方法:
使用return b;并再使用处对b再一次赋值;
对象的话跨方法建议使用深拷贝(get set慢慢玩吧!)

//或者
BeanUtils.copyProperties(b,a);(注意如果多个对象赋值会出现覆盖问题,以及属性对应不上时会出现拷贝不上,如果是使用多个对象给一个对象赋值的话建议还是get set稳妥一点)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值