JAVA中,函数的参数,是传值,对简单类型来说,是数值。
对对象来说,传的是对象的指针。
我记得刚到第一家公司的时候,还和别人争论过,我也查找了不少的国内国外文章。
Object上的Clone方法是一个本地方法,本地方法的运行速度很快。
子类只要实现了Clonable接口,并重载了Clone方法,
一般这样子重写:
[code]
public Object clone() {
CloneC o = null;
try {
o = (CloneC) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
[/code]
如果该类的上面的每个子类都这样Override了Object的clone方法之后
那么执行该类的clone方法,相当于就是执行object上的clone方法
object上的方法,为什么能执行的快?其实很简单,在该类所在内存空间上
扫描一遍,复制那些值,在内存上的操作当然是最快速的了。所以clone速度才快嘛。
但此时应该注意到,你克隆出来的对象里的非简单类型,是一个指针,该指针指向的对象
和在被克隆的对象里的内存地址是一致的,这样也比较好理解,clone方法没必要为clone方法来假设你需要深度克隆,在内存管理上也可能存在着浪费。
所以你希望将非简单类型的数据和被克隆的里面的相对应的数据值相等,但是指针指向不一样的地址,实现所谓的深度克隆的话,应该要保证该类的内部非简单类型都实现了clone方法。
对对象来说,传的是对象的指针。
我记得刚到第一家公司的时候,还和别人争论过,我也查找了不少的国内国外文章。
Object上的Clone方法是一个本地方法,本地方法的运行速度很快。
子类只要实现了Clonable接口,并重载了Clone方法,
一般这样子重写:
[code]
public Object clone() {
CloneC o = null;
try {
o = (CloneC) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
[/code]
如果该类的上面的每个子类都这样Override了Object的clone方法之后
那么执行该类的clone方法,相当于就是执行object上的clone方法
object上的方法,为什么能执行的快?其实很简单,在该类所在内存空间上
扫描一遍,复制那些值,在内存上的操作当然是最快速的了。所以clone速度才快嘛。
但此时应该注意到,你克隆出来的对象里的非简单类型,是一个指针,该指针指向的对象
和在被克隆的对象里的内存地址是一致的,这样也比较好理解,clone方法没必要为clone方法来假设你需要深度克隆,在内存管理上也可能存在着浪费。
所以你希望将非简单类型的数据和被克隆的里面的相对应的数据值相等,但是指针指向不一样的地址,实现所谓的深度克隆的话,应该要保证该类的内部非简单类型都实现了clone方法。