今天写程序时发现,当String数组A在用Clone()方法将A的内容克隆给另一个String数组B时,此时得到的数组B的地址指向的是一个新的地址。既不是A的地址,也不是原来B的地址。这说明在调用Clone()方法时,该方法在后台创建了一个新的对象。
举个例子:
public static void main(String [] args){ String [] A = {"aa","bb"}; String [] B = new String [2]; System.out.println("A的地址是: "+A); System.out.println("复制前B的地址是: "+B); B = A; System.out.println("A直接赋给B时,B的地址是: "+B); B = A.clone(); System.out.println("Aclone给B时,B的地址是: "+B); }输出结果为:
A的地址是: [Ljava.lang.String;@15bc6c8 复制前B的地址是: [Ljava.lang.String;@578073 A直接赋给B时,B的地址是: [Ljava.lang.String;@15bc6c8 Aclone给B时,B的地址是: [Ljava.lang.String;@b20352
Object类中定义了clone()方法。对数组进行克隆。举例:
public static void main(String args[]){ int a[]=new int[5]; int b[]=new int[6]; Arrays.fill(b,1); a=b.clone(); System.out.println(Arrays.toString(a)); } 输出结果是: 1 1 1 1 1 1
克隆不仅是拷贝内容,还会把结构也给改掉。声明的数组a 只有5个内存空间,将b克隆赋给a后 b的数组大小也变为6了。可见clone方法时直接创建了新的对象。
对常量数组做如下测试:
final int a[] = new int[5]; int b[]=new int[6]; Arrays.fill(b,1); a=b.clone(); System.out.println(Arrays.toString(a)); 输出结果一样。
原文:http://blog.csdn.net/chenlei0630/article/details/18710371