Java 中的浅度克隆与深度克隆(测试用例)
来源:互联网 发布:悉尼周边游 知乎 编辑:程序博客网 时间:2024/05/27 06:55
// 这里借助了 Hutool 工具包,www.hutool.cnimport com.xiaoleilu.hutool.clone.CloneSupport;public class Student extends CloneSupport<Student> implements Serializable { private String name; private int age; private List<Tortoise> tortoises; public Student() { } public Student(String name, int age, List<Tortoise> tortoises) { this.name = name; this.age = age; this.tortoises = tortoises; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", tortoises=" + tortoises + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<Tortoise> getTortoises() { return tortoises; } public void setTortoises(List<Tortoise> tortoises) { this.tortoises = tortoises; }}public class Tortoise implements Serializable { private String name; private int age; public Tortoise() { } public Tortoise(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Tortoise{" + "name='" + name + '\'' + ", age=" + age + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}public class CloneTest { private static List<Tortoise> oldTortoises = new ArrayList<Tortoise>(); private static List<Tortoise> newTortoises = new ArrayList<Tortoise>(); static { oldTortoises.add(new Tortoise("old_巴西龟1", 3)); oldTortoises.add(new Tortoise("old_巴西龟2", 5)); newTortoises.add(new Tortoise("new_巴西龟1", 4)); newTortoises.add(new Tortoise("new_巴西龟2", 6)); } /** * 场景 1:对象引用 */ @Test public void testRefer() { Student student1 = new Student("wgj", 24, oldTortoises); Student student2 = student1; // 设置 tortoises,tortoises 指向同一地址 // student1.setTortoises(newTortoises); // student2.setTortoises(newTortoises); // 改变 tortoises,tortoises 内容一起改变 student1.getTortoises().add(new Tortoise("add_巴西龟3", 7)); compare(student1, student2); } /** * 场景 2:浅度克隆 */ @Test public void testClone() { Student student1 = new Student("wgj", 24, oldTortoises); Student student2 = student1.clone(); // 设置 tortoises,tortoises 指向不同地址 // student1.setTortoises(newTortoises); // student2.setTortoises(newTortoises); // 改变 tortoises,tortoises 内容一起改变 student1.getTortoises().add(new Tortoise("add_巴西龟3", 7)); compare(student1, student2); } /** * 场景 3:深度克隆 */ @Test public void testCloneByStream() { Student student1 = new Student("wgj", 24, oldTortoises); Student student2 = ObjectUtil.cloneByStream(student1); // 设置 tortoises,tortoises 指向不同地址 // student1.setTortoises(newTortoises); // student2.setTortoises(newTortoises); // 改变 tortoises,tortoises 内容不会一起改变 student1.getTortoises().add(new Tortoise("add_巴西龟3", 7)); compare(student1, student2); } /** * 比较 * * @param o1 * @param o2 */ private void compare(Object o1, Object o2) { System.out.println("==: " + (o1 == o2)); System.out.println("equals: " + (o1.equals(o2))); System.out.println(o1.toString()); System.out.println(o2.toString()); }}
阅读全文
0 0
- Java 中的浅度克隆与深度克隆(测试用例)
- Java中的clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- Java clone() 浅克隆与深度克隆
- eXtremeDB金融版给风险管理和合规加速
- 笔记
- datanode非dfs预留空间设置
- 【BIM+毕加索】毕加索Web 3D技术亮相2017北京国际风能大会
- Java线程面试题Top50
- Java 中的浅度克隆与深度克隆(测试用例)
- Erlang网络编程中的一个特别的函数prim_inet:async_accept/2
- 用Python物理建模的第一本书终于来啦
- 滚动词条
- COBOL基础知识
- iOS 关于UILabel 自适应文字大小
- WPF之路——ViewBox组件
- Flink剖析
- 驼峰式转下划线大写(包含对数字的判断)