克隆 面试题
1.以下代码执行的结果是?
import java.util.Arrays;
class CloneTest {
public static void main(String[] args) throws CloneNotSupportedException {
CloneObj cloneObj = new CloneObj();
cloneObj.name = "老王";
cloneObj.age = 30;
cloneObj.sistersAge = new int[]{18, 19};
CloneObj cloneObj2 = (CloneObj) cloneObj.clone();
cloneObj2.name = "磊哥";
cloneObj2.age = 33;
cloneObj2.sistersAge[0] = 20;
System.out.println(cloneObj.name + "|" + cloneObj2.name);
System.out.println(cloneObj.age + "|" + cloneObj2.age);
System.out.println(Arrays.toString(cloneObj.sistersAge) + "|" + Arrays.toString(cloneObj2.sistersAge));
}
}
class CloneObj implements Cloneable {
public String name;
public int age;
public int[] sistersAge;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
答:执行结果如下。
老王|磊哥
30|33
[20, 19]|[20, 19]
浅克隆指的是单纯地对对象进行低层次的复制,“低”主要体现在在复制对象时,对象中的引用没有重新开辟空间,而是将新的引用指向原来的的内容。
cloneObj和cloneObj 共用 int[]{18, 19}
cloneObj2.sistersAge[0] = 20; 就等于 cloneObj.sistersAge[0] = 20;