对象的clone

一、为使一个对象能够实现克隆,需实现Cloneable接口,并加入clone()方法,Object类中clone()是protected类型,这里需将其设为publlic;在LocalCopy中,g()和f()方法揭示了两种参数传递方法的差异,其中g()演示的是按引用传递,它会修改外部对象,并返回对那个外部对象的一个引用,而f()是对自变量的克隆,所以将其分离出来,并让原来的对象保持独立,随后,它继续做它希望的事情,甚至能返回这个新对象的句柄,而且不会对原来的对象产生任何副作用,v = (MyObject)v.clone();它的作用正是创建一个本地副本

class MyObject implements Cloneable{

int i;
public MyObject(int ii){i = ii;} 
public Object clone(){
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
System.out.println("MyObject can not clone");
}
return o;
}
@Override
public String toString() {
return Integer.toString(i);
}
}
public class LocalCopy{
static MyObject g(MyObject v){
v.i ++;
return v;
}
static MyObject f(MyObject v){
v = (MyObject)v.clone();
v.i ++;
return v;
}
public static void main(String[] args) {
MyObject a = new MyObject(11);
MyObject b = g(a);
if(a.equals(b)){
System.out.println("a == b");
}else{
System.out.println("a != b");
}
System.out.println("a = " + a);
System.out.println("b = " + b);
MyObject c = new MyObject(47);
MyObject d = f(c);
if(c.equals(d)){
System.out.println("c == d");
}else{
System.out.println("c != d");
}
System.out.println("c = " + c);
System.out.println("d = " + d);
}

}

结果:

a == b
a = 12
b = 12
c != d
c = 47
d = 48

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值