深复制和浅复制java,Java深复制

  深复制和浅复制java,Java深复制

  有三种方法可以将引用从一个对象复制到另一个对象。第一种方式是直接赋值,第二种方式是浅拷贝,第三种方式是深拷贝。

  1.直接赋值

  在Java中,A a1=a2,实际上是复制了一个引用,也就是说a1和a2指向同一个对象。因此,当a1发生变化时,a2中的成员变量也会发生变化。

  2.浅复制(复制引用但不复制引用的对象)

  浅抄,又称浅抄。创建一个新对象,然后将当前对象非静态字段复制到新对象中;如果该字段是值类型,则复制该字段;如果此字段引用类型,则复制被引用的对象,但不复制被引用的对象。因此,原始对象及其副本指的是同一个对象。

  (推荐视频:java视频教程)

  类简历实现可克隆的{

  公共对象克隆(){

  尝试{

  return(简历)super . clone();

  } catch(异常e) {

  e . printstacktrace();

  返回null

  }

  }

  }3.深复制(复制对象和其引用对象)

  也称为深度复制,它不仅复制对象本身,还复制对象中包含的引用所指向的所有对象。

  班级学生实现可克隆的{

  字符串名称;

  int age

  p教授;

  学生(字符串名称,整数,教授p) {

  this.name=name

  this.age=年龄;

  this.p=p

  }

  公共对象克隆(){

  学生o=null

  尝试{

  o=(学生)super . clone();

  } catch(CloneNotSupportedException e){

  system . out . println(e . tostring());

  }

  o.p=(教授)p . clone();

  返回o;

  }

  }使用clone()方法克隆一个对象的步骤:

  1)克隆的类应该实现Cloneable接口。

  2)克隆的类必须覆盖clone()方法。

  那么编程时,如何选择使用哪种复制方法呢?首先,检查该类是否有只不过是基本类型的数据成员(即对象)。如果没有,就返回super.clone()。如果是,确保类中包含的所有非基本类型成员变量都被深度复制。

  引申:浅复制与深复制的区别?

  浅层克隆:被复制对象的所有变量都包含与原对象相同的值,而其他对象的所有引用仍然指向原对象。换句话说,浅层复制只复制所考虑的对象,而不是它所引用的对象。

  深度克隆:复制对象的所有变量都包含与原始对象相同的值,引用其他对象的变量除外。引用其他对象的变量将指向复制的新对象,而不是原始对象。换句话说,深度复制复制被复制对象引用的所有对象。

  扩展:

  原型模式主要用于复制对象。它通过实现接口(实现Cloneable接口)和重写方法(重写Object类中的clone()方法)来完成原型模式。

  原型模式中的拷贝分为“浅拷贝”和“深拷贝”:

  浅拷贝:拷贝值类型成员变量的值,只拷贝引用类型成员变量的引用,不拷贝被引用对象。

  复制:复制值类型成员变量的值,复制引用类型成员变量的引用对象。

  (Object类的clone方法只复制对象中基本数据类型的值,不复制数组、容器对象、引用对象等。这是浅薄的复制。如果要实现深度复制,数组、容器对象、引用对象等。在原型模式下必须单独复制。)

  原型模式的优点:

  1.如果创建新对象很复杂,可以使用原型模式来简化对象创建过程。

  2.创建一个对象总是mode,在性能上比直接创建一个对象要好很多,因为Object类的clone方法是一个局部方法,直接操作内存中的二进制流,特别是在复制大型对象的时候,性能上的差别非常明显。

  原型模式的使用场景:

  由于以上优点,当需要重复创建类似的对象时,可以考虑使用原型模式。例如,有必要在循环中创建一个对象。如果对象创建过程比较复杂或者有很多循环,使用原型模式不仅可以简化创建过程,还可以提高系统的整体性能。

  本文来自我们,java教程专栏,欢迎学习!以上是Java中“浅拷贝”和“深拷贝”的区别和实现(带代码)的细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: