Java 数组
首先,数组是Java中的对象。它们不是像int、short或long这样的基本类,也不是具有很多方法的全功能对象,但由于它们是对象,所以它们隐式地扩展了Object,这就是为什么可以使用数组引用(例如toString())调用java.lang.object的任何方法。
Java中数组的另一个重要之处是,一旦创建,就不能更改数组的大小。
数组拷贝
目前在Java中数据拷贝提供了如下方式:
- clone
- System.arraycopy
- Arrays.copyOf
- Arrays.copyOfRange
clone 方法
clone方法是从Object类继承过来的,基本数据类型(int ,boolean,char,byte,short,float ,double,long)都可以直接使用clone方法进行克隆,注意String类型是因为其值不可变所以才可以使用。
int[] a1 = {1, 3}; |
String[] a1 = {"a1", "a2"}; |
System.arraycopy
int[] a1 = {1, 2, 3, 4, 5}; |
Arrays.copyOf
int[] a1 = {1, 2, 3, 4, 5}; |
Arrays.copyOfRange
int[] a1 = {1, 2, 3, 4, 5}; |
深拷贝和浅拷贝
浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。即默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。
深拷贝,在拷贝引用类型成员变量时,为引用类型的数据成员另辟了一个独立的内存空间,实现真正内容上的拷贝。