深拷贝和浅拷贝(clone用法)
来源:互联网 发布:王者荣耀自慰软件 编辑:程序博客网 时间:2024/05/16 17:47
我们有的时候在给一个对象赋值另一个对象,要实现的功能是在对后一个对象做修改或其他操作对原有对象没有影响的功能。这种情况我们就要做深拷贝。
现在我写一个实体代码:
public class People implements Cloneable {private String name;private int 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 Object clone() throws CloneNotSupportedException {People p = (People) super.clone();return p;}}
然后我用一个测试类来讲解深拷贝和浅拷贝的区别:
浅拷贝:
public class objecttest {public static void main(String [] arg){People p=new People();p.setName("ss");p.setAge(22);People pp=new People();pp=p;pp.setName("aa");pp.setAge(33);System.out.println(p.getName());System.out.println(pp.getName());}}看一下运行结果:
这就是浅拷贝:说白了就是在创建一个People对象把它赋值给p,让变量p存储的是创建的People对象的地址。在创建一个People对象将他辅助给pp变量,然后让pp变量存储新创建的People对象的地址,然后在将p变量存储的指向原先创建的People地址赋值给pp。这样就覆盖了后pp的指向,是pp指向了原先创建的地址空间。导致p和pp都是指向的原先创建的People对象的地址。在修改pp对象时我们也将p指向的对象修改了。
深拷贝:
public class objecttest {public static void main(String [] arg){People p=new People();p.setName("ss");p.setAge(22);People pp=new People();try {pp=(People) p.clone();pp.setName("aa");} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(p.getName());System.out.println(pp.getName());}}运行后的结果:
深拷贝就是将p指向的对象每一个属性和方法都拷贝到pp指向的对象中,就像copy了一份,使对pp对象进行修改或其他操作对原有的p对象没有影响。
0 0
- 深拷贝和浅拷贝(clone用法)
- clone的用法--浅拷贝和深拷贝
- Clone 分浅拷贝和深拷贝
- Java&&Clone之浅拷贝和深拷贝
- [clone]Java中的深拷贝和浅拷贝 实例解析
- java clone方法之深拷贝和浅拷贝
- 浅拷贝和深拷贝(谈谈java中的clone)
- 深拷贝(deep clone)和浅拷贝(shallow copy)
- Java的clone方法--深拷贝和浅拷贝
- 浅拷贝和深拷贝(谈谈java中的clone)
- java中的clone()方法,浅拷贝和深拷贝
- java中的Clone(深拷贝,浅拷贝)
- 深拷贝与浅拷贝(clone方法与赋值)
- java中的Clone(深拷贝,浅拷贝)
- Java中的clone() 深拷贝 浅拷贝
- php5中的clone 浅拷贝 深拷贝
- clone方法 --深拷贝与浅拷贝
- java中的clone( ) -- 浅拷贝 | 深拷贝
- Java-类初始化顺序-1
- 多进程和多进程间通信
- 预写式日志相关结构体
- Spring 注解@Component,@Service,@Controller,@Repository
- pg_controldata (1)
- 深拷贝和浅拷贝(clone用法)
- pg_controldata (2)
- [翻译] 使用Apache Spark估算金融风险
- yum安装lamp环境常遇到的问题
- Cocos2d-JS中JavaScript继承
- 多线程原理、线程安全函数和多线程程序需要注意的问题
- 如何判断什么是好的Automation Framework?
- fftw 使用
- android面试1