问题:使用等号对对象进行赋值之后,发现再用时值未赋值过来
原因:浅拷贝作用域问题
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稳妥一点)