Clone 方法的使用(深度克隆和浅克隆)
2010-04-07 17:04
483 查看
克隆羊圈,每个羊圈里有一只羊
克隆的羊圈,里面的羊还是第一个羊圈的羊,他们完全相同.并没有被克隆过来,这就是浅层克隆,我们调整代码,实现深层克隆
public class Sheep implements Cloneable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public Sheep clone() throws CloneNotSupportedException { return (Sheep) super.clone(); } public static void main(String[] args) throws CloneNotSupportedException { Sheepfold sheepfold1 = new Sheepfold(); sheepfold1.setName("第一个羊圈"); Sheep sheep1 = new Sheep(); sheep1.setName("第一只羊"); sheepfold1.setSheep(sheep1); Sheepfold sheepfold2 = sheepfold1.clone(); sheepfold2.setName("第一个羊圈的克隆"); System.out.println("sheepfold1.name=" + sheepfold1.getName() + ",sheep.name=" + sheepfold1.getSheep().getName()); System.out.println("sheepfold2.name=" + sheepfold2.getName() + ",sheep.name=" + sheepfold2.getSheep().getName()); System.out.println("sheepfold1.sheep==sheepfold1.sheep?" + (sheepfold1.getSheep() == sheepfold2.getSheep())); } } class Sheepfold implements Cloneable { private String name; private Sheep sheep; @Override public Sheepfold clone() throws CloneNotSupportedException { Sheepfold o = (Sheepfold) super.clone(); return o; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Sheep getSheep() { return sheep; } public void setSheep(Sheep sheep) { this.sheep = sheep; } }
运行结果如下: 1. sheepfold1.name=第一个羊圈,sheep.name=第一只羊 2. sheepfold2.name= 第一个羊圈的克隆,sheep.name=第一只羊 3. sheepfold1.sheep==sheepfold1.sheep?true
克隆的羊圈,里面的羊还是第一个羊圈的羊,他们完全相同.并没有被克隆过来,这就是浅层克隆,我们调整代码,实现深层克隆
@Override public Sheepfold clone() throws CloneNotSupportedException { Sheepfold o = (Sheepfold) super.clone(); o.sheep = this.sheep.clone(); return o; }
运行结果 1. sheepfold1.name=第一个羊圈,sheep.name=第一只羊 2. sheepfold2.name= 第一个羊圈的克隆,sheep.name=第一只羊 3. sheepfold1.sheep==sheepfold1.sheep?false
相关文章推荐
- Clone 方法的使用(深度克隆)
- Java 深度克隆 clone()方法重写 equals()方法的重写
- 通过实现Cloneable接口和覆盖clone()方法实现深度克隆,以及如何通过ByteArrayIOStream实现克隆
- Java案例:使用clone()方法克隆对象
- Java 基础数据类型 和 深度克隆对象的2种方法(实现Cloneable接口或者实现对象序列化)
- Java 深度克隆 clone()方法重写 equals()方法的重写
- 【jQuery】使用jQuery的clone()方法来克隆元素时,如何保持id的唯一性
- JAVA克隆详解以及clone方法使用
- jquery之设置元素内容(克隆元素,使用clone()方法)
- java克隆对象clone()的使用方法和作用
- java中equals和==之间的区别?clone方法的作用,及其为什么要使用clone方法?如何使用clone复制对象?以及深克隆浅克隆
- 克隆方法clone()的使用
- 浅析Java中clone()方法浅克隆与深度克隆
- 关于object类的clone方法浅克隆与深度克隆
- Java 深度克隆 clone()方法重写 equals()方法的重写
- java之clone方法的使用
- js数组排序 reverse()和sort()方法的使用 复制数组slice()和克隆数组concat()
- js克隆对象、数组的常用方法【clone】
- 【方法】_(Web网页版+GitHub For Windios客户端+Shell命令)_简单使用GitHub--克隆-上传-同步变化
- Clone使用方法详解