1、addAll() 和 = 赋值的区别
“=”是对象地址的传递并复制
java中内存的分配方式有两种,一种是在堆中分配,一种是在堆栈中分配,所有new出来的对象都是在堆中分配的,函数中参数的传递是在栈中分配的。
java中有几种基本类型如int,float,double,char,byte等,他们不是对象,除此之外一切都是对象,所有的对象都是在堆上分配的。
因此当创建对象或者对已经创建的对象赋值时(注意是对象,不是基本类型):Object a=new Object 和Object a=b(b是Object的子类型或者同类型)时,进行的是对象地址的传递并复制。这就是所说的句柄的传递和赋值。
句柄里存储的就是对象的地址,句柄就是指针,只不过是你无法得到的地址,java就是通过这一点巧妙的将指针隐藏起来。当对象作为参数传递到方法中时,传递的就是对象的地址,而行参中保存的是实参地址的副本(这就是最关键的地方,也是值传递,值传递就是将实参的值的副本作为行参)
参考链接:https://www.jianshu.com/p/3a4b9a808f89
2、addAll是浅拷贝
list的addAll方法,是浅拷贝,拷贝后,对新的list中数据更改,对原来的list中对象有影响。
但是若是list中保存的是基本类型的数据,拷贝前后的数据就没有联系了。即对新的list更改,不会影响原来的list。