int类型的拷贝:
public static void main(String[] args) { int[] str1 = {0,1}; int[] str2 = str1; str2[1] = 2; int[] str3 = str1.clone(); str3[1] = 3; System.out.println(Arrays.toString(str1)); System.out.println(Arrays.toString(str2)); System.out.println(Arrays.toString(str3)); }
[0, 2]
[0, 2]
[0, 3]
可以看到只有调用clone()方法,才能深拷贝一个基本对象。
String类的拷贝:
public static void main(String[] args) { String[] str1 = {"a0", "a1"}; String[] str2 = str1; // str2[1] = "a2"; String[] str3 = str1.clone(); // str2[1] = "a3"; System.out.println(str1); System.out.println(str2); System.out.println(str3); }
[Ljava.lang.String;@4554617c
[Ljava.lang.String;@4554617c
[Ljava.lang.String;@74a14482
可以看到,String类的复制与包装类一样,是索引的复制,而其clone()方法可以实现值的复制。