Object的clone()方法、深拷贝、浅拷贝
2016-03-26 15:52
465 查看
一个对象直接使用=,比如Object o1=new Object();
Object o2=o1;那么问题是o1改变,o2也会改变。
这时候,需要不随之前的对象改变而改变,使用clone。
需要注意clone是protect的,所以子类继承Object ,否则抛出异常
就这样复制成功,不受改变而影响。
但是原来对象一些属性有些是可变对象,这些对象简单的clone持引用,还是不可以。
原因在于你复制了对象的引用,这是不行的,如果对象改变,你也会改变。当然String
这种对象,他就是不变,所以他怎么变都没有事情,但是其他对象就不行了。
那么记住,基本类型,String直接对象clone,其他需要在对象clone,其属性还要继续clone
Object o2=o1;那么问题是o1改变,o2也会改变。
这时候,需要不随之前的对象改变而改变,使用clone。
需要注意clone是protect的,所以子类继承Object ,否则抛出异常
public Teacher clone() { try { return (Teacher) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; }
就这样复制成功,不受改变而影响。
但是原来对象一些属性有些是可变对象,这些对象简单的clone持引用,还是不可以。
原因在于你复制了对象的引用,这是不行的,如果对象改变,你也会改变。当然String
这种对象,他就是不变,所以他怎么变都没有事情,但是其他对象就不行了。
那么记住,基本类型,String直接对象clone,其他需要在对象clone,其属性还要继续clone
public class Teacher implements Cloneable { String id; int num; Date date; public Teacher clone(){ Teacher t= (Teacher)super.clone(); t.date=(Date)t.date.clone(); return t; } }
相关文章推荐
- JSONObject json = JSONObject.fromObject(josnStr);报错
- ORA-00020: No more process state objects available故障一例
- Delphi_03_Delphi_Object_Pascal_基本语法_01
- objective-C学习笔记(十)协议
- objective-c C类型数组
- 地图和定位
- java和scala互操作之不能读取嵌套object
- Assigning retained object to unsafe property;object will be released after assignment
- Object-C基础(3)—— 流程控制与数组
- iOS : Objective-C to Wax (OC 转 Wax) 笔记
- NSObject+MZCExpansion.h
- IOS基础:深入理解Objective-c中@class的含义
- Object-C基础(2)—— NSLog函数
- Object-C基础(1)—— 变量名与类型
- Objective-C学习中Cocoa提供的一种特性(KVC)
- objective-C学习笔记(九)ARC
- 学习 Object-C: 简史
- java语言 flatten(Object[] objs){} 方法
- Objective-C内存管理
- 有料面试题之--Object里面的方法