Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26213581
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Java

2009-11-30 10:23:50

java里面的对象克隆:实际存在的对象拷贝几份!
即将一个实际的对象进行多份拷贝
package xsocket.server;

public class Test implements Cloneable {
    private String name;
    public void setName(String arg) {
        this.name = arg;
    }
    public String getName() {
        return this.name;
    }
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    public static void main(String[] args) throws CloneNotSupportedException {
        Test shepp = new Test();
        shepp.setName("first");
        System.out.println(shepp.getName());
        Test sheppclone = (Test)shepp.clone();  //对象拷出来一份副本
        System.out.println(sheppclone.getName());
       
        System.out.println("shepp == sheppclose" + (shepp == sheppclone));
    }
}
要知道== 表示的是同一份对象。这里面的内存位置是不一样的哦。所以==就不一样了!

package xsocket.server;

public class Test implements Cloneable {
    private String name;
    public void setName(String arg) {
        this.name = arg;
    }
    public String getName() {
        return this.name;
    }
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    public static void main(String[] args) throws CloneNotSupportedException {
        Test shepp = new Test();
        shepp.setName("first");
        Test shepp2 = shepp;  //只是将两个值指向了同一个对象了所以会相互影响到对方的值!
        System.out.println(shepp2.getName());
        Test shepp3 = (Test)shepp.clone();//再做一个实际的副本出来就不会相互影响的!
        shepp3.setName("another");
        System.out.println(shepp3.getName());
        System.out.println(shepp.getName());
    }
}

输出:
first
another
first
(这就是拷贝的好处了!)
要考虑一下什么时候用浅clone什么时候用深clone
阅读(746) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~