System.arraycopy

在看ArrayList源码是看到了Arrays.copyOf底层调用的是系统方法System.arraycopy,对此方法产生了好奇,所以做了下探究,System.arraycopy究竟是深复制还是浅复制呢?

深复制: 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。

浅复制: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

对象初始化
赋值与修改值代码
结果

由上面的Photo数组可以看出,在修改p3对象后,targetArr里面的值也随之改变,因此得出结论:System.arraycopy方法采用的是浅复制

你可能感兴趣的:(System.arraycopy)