引用类型的数组存的是地址浅拷贝 基本类型记录的是数据深拷贝 什么是浅拷贝呢简单的来说就是大家指向了同一个引用 加入有一个类Cat他有一个name属性
public class Cat{
String name
;
.
.
.
}
Cat a
= new Cat();
a
.name
= "mimi";
Cat b
= a
;
b
.name
= "mimi2";
执行完这段代码a.name会是多少呢
测试的结果是mimi2 说明改变了 那么内存中是如何改变的呢
当b.name发生后就变成了虚线的指向这就是浅拷贝 如何达到深拷贝呢 需要对b这个变量new一个空间出来
Cat a
= new Cat();
a
.name
= "mimi";
Cat b
= new Cat;
b
.name
= a
.name
;
如果此时改变b的name a会有变化嘛 答案是:没有 还是mimi 读者可以自行尝试
则当b.name发生改变时只是改变了 b.name的引用如虚线表示而并不会影响到a的name属性这就是深拷贝 而基本基本类型都是在存在栈空间所以都有自己单独的空间数据 数据将会直接copy到对应的空间中
假如a b都是整数 b = a 发生的内存是这样的
所以基本类型拷贝的是数据而不是地址因此改变a不会受影响
**注意:**arrays.copyof 也是不安全的,也出现了浅拷贝的问题当有嵌套集合存在时第一层不会出现问题 但是二三层就会出现浅拷贝问题