本帖最后由 黄玉昆 于 2013-2-22 08:04 编辑
我在书上看到了关于clone的一些知识点,书中提到:
默认的克隆操作是浅拷贝,也就是说,clone只是对当前对象进行了拷贝,而没有拷贝对象中引用了的其他对象。
浅拷贝(浅克隆)具体含义是:被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深拷贝(深克隆)具体含义是:被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制的新对象,而不再是原有的那些被引用的对象。换言之,深复制把复制的对象所引用的对象都复制了一遍。
那么对于所有的数组类型均包含了一个clone方法,这个方法被设为public,而不是protected(数组外的基本上是被设为protected),可以利用这个方法创建一个包含所有数据元素的一个新数组,如:- int[] num = {2,3,5,7,11,13}
- int [] cloned = (int[])num.clone();
- cloned[5] = 12;//并没有改变num[5]的值
复制代码 那么我想说的是:
1、如果对其他类型的如新定义的Employee类型,将诸如姓名,薪水,雇佣日期等数据包装起来放入Employee[]的数组,那么是否也能像int[]数组一样实现深拷贝呢?
2、如果定义的新数组里面的数据都是诸如int,double这些基本类型组成的,那么这种数组是不是一定能实现深拷贝呢?
希望知道的朋友可以对这两个问题一一解答,谢谢。
|