浅拷贝与深拷贝
来源:互联网 发布:贵阳大数据交易中心 编辑:程序博客网 时间:2024/06/06 06:24
浅拷贝和深拷贝的错误容易出现在引用类型中,当一个引用类型含有引用类型的成员变量,比如下方的源代码中引用类型Employee
含有引用类型的成员变量name
,当有类似情形时,会比较容易造成浅拷贝与深拷贝的混淆。
package copy;public class Employee implements Cloneable{ private String name = ""; private int age = 0; public Employee(String name, int age) { super(); this.name = name; this.age = age; } @Override public Employee clone() throws CloneNotSupportedException { Employee copy = (Employee) super.clone(); String name = new String(this.name); copy.setName(name); return copy; } 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 static void main(String[] args) { Employee employee = new Employee("Original employee", 10); Employee copy = null; try { copy = employee.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } System.out.println("employee == copy? " + (employee == copy)); System.out.println("employee'name == copy'name? " + (employee.getName() == copy.getName())); }}
当我们只这样重写clone方法时,那Employee调用clone时将会是浅拷贝,从输出也能看的出来
@Override public Employee clone() throws CloneNotSupportedException { Employee copy = (Employee) super.clone(); return copy; }
输出
employee == copy? falseemployee'name == copy'name? true
所以这种情况是需要特别注意的地方。
如果我们需要深拷贝(Deep Copy),那需要对Employee内的所有引用类型再进行重新new,这样就可以进行深度拷贝。
@Overridepublic Employee clone() throws CloneNotSupportedException { Employee copy = (Employee) super.clone(); String name = new String(this.name); copy.setName(name); return copy;}
employee == copy? falseemployee'name == copy'name? false
阅读全文
0 0
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 周志华西瓜书-AI英语单词,第一章
- Mac系统 每次终端登录mysql都需要配置路径问题
- java的多线程安全,ReentrantLock与synchronized锁
- 【贪心】Coupons and Discounts
- 26岁学编程会不会已经晚了?
- 浅拷贝与深拷贝
- [Initial] Build: PL By: JS
- 网络 一一 HTTP 和 TCP/IP 的区别
- JAVA中的泛型(1)
- .NETCore 知识点记录-QuartzCore 定时任务
- [Unity][资源分享][精华分享]Unity官方教程素材分享
- 【每日一题(6)】Div. 64 CodeForces
- 日期的三级联动(纯js)
- 统计学习方法(第二章)感知机