zoukankan      html  css  js  c++  java
  • Java深拷贝与浅拷贝

    一、创建对象的方式

    1. new关键字,A a=new A();

    2. Constructor类的newInstance()方法,反射实现

    3. Class类的newInstance()方法,内部还是调用Constructor类的newInstance()方法,反射实现

    4. clone()方法,复制对象产生一个新对象

    5. 序列化反序列化

    二、引用拷贝 vs 对象拷贝

    A a1=new A();

    A a2=a1;  // a2和a1是同一个对象,内存地址相同,即引用相同

    三、浅拷贝:

    1. 原对象的字段里,包含值类型和引用类型:值类型拷贝值;引用类型只拷贝了引用,而不拷贝引用的对象

    2. Objects类里有一个clone()方法,是一个本地方法

    3. Cloneable接口是一个空接口,接口里没有方法,但如果不实现此接口,会有CloneNotSupportedException异常

    4. 使用clone()方法默认是浅拷贝

    5. String虽然是引用类型,但在clone()时可以当做值类型处理

    四、深拷贝:

    1. 值类型和引用类型都复制,拷贝出来的对象和原对象相互独立

    2. 除了类本身要实现Cloneable接口,类中的其他引用类也要实现Cloneable接口,比较麻烦

    3. 对a1序列化,反序列化到a2,可以实现深拷贝

    参考:

    https://www.cnblogs.com/ysocean/p/8482979.html

  • 相关阅读:
    25号了
    9月特别日程
    26日 晴
    8月22日 出游时间更改
    雷雨过后
    28日 多云
    080826 小雨(补记)
    080822 阴
    27日 晴
    IOS 5 ARC机制 (一)
  • 原文地址:https://www.cnblogs.com/june0816/p/11421457.html
Copyright © 2011-2022 走看看