展开全部
给你下边的例子,简单的来说。数组是没有62616964757a686964616fe78988e69d8331333332613762被clone,StringBuffer的底层是char[] 数组。
所以两个对是的StringBuffer对象,还是同一个。
也就是 秒杀腹黑菟 说的深度clone 和浅clone。
被clone的对象,里面的对象,并没有一起被clone.
你可以看一下
public class Clone extends Object implements Cloneable {
int a = 0;
StringBuffer b = new StringBuffer("hello");
char[] values = new char[10];
int[] array = new int[10];
public static void main(String[] args) throws Exception {
new Clone().run();
}
public void run() throws CloneNotSupportedException {
Clone a1 = new Clone();
for (int i = 0; i < a1.values.length; i++) {
a1.values[i] = (char) ('A' + i);
a1.array[i] = i;
}
Clone b1 = (Clone) a1.clone();
System.out.println(a1.b.toString() + " : " + b1.b.toString());
System.out.println("is a1 == b1 ? :" + (a1 == b1));
System.out.println("is a1.b == b1.b?:" + (a1.b == b1.b));
System.out.println("both hashCode:" + a1.b.hashCode() + " : "
+ b1.b.hashCode());
b1.b.insert(0, "what is this?");
System.out.println(a1.b.toString() + " : " + b1.b.toString());
System.out.println("is a1.b == b1.b now?:" + (a1.b == b1.b));
System.out.println("both hashCode:" + a1.b.hashCode() + " : "
+ b1.b.hashCode());
System.out.println(a1.values);
System.out.println(b1.values);
a1.values[0] = 'a';
a1.array[0] = -1;
System.out.println(b1.values);
System.out.println(b1.array[0]);
b1.array = a1.array.clone();
a1.array[0] = 0;
System.out.println(b1.array[0]);
}
}