classPersonimplementsCloneable{Stringname;intage;publicPerson(Stringname,intage){this.name=name;this.age=age;}@OverrideprotectedObjectclone()throwsCloneNotSupportedException{returnsuper.clone();}} 这个类使用了Object的默认clone方法,也就是浅拷贝。在调用这个类的clone方法时,仅仅会浅拷贝出一个新的Person对象,...
* 深拷贝 */publicclassDeepCopyUtilimplementsSerializable{publicstatic<TextendsSerializable>TdeepCopy(Tobject){try{ByteArrayOutputStream baos=newByteArrayOutputStream();ObjectOutputStream oos=newObjectOutputStream(baos);oos.writeObject(object);ByteArrayInputStream bais=newByteArrayInputStream(baos.toByteArray...
1-浅拷贝(shallow copy):创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象。因此,原始对象及其副本引用同一个对象。 2-深拷贝 (deep copy):创建一个新对象,然后将当前对象的非静态字段复制到该新对象,...
Couple类实现Cloneable接口,重写Object的clone方法。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 publicclassCoupleimplementsCloneable{privateString name;privateint gender;@OverrideprotectedObjectclone()throws CloneNotSupportedException{returnsuper.clone();}} User类修改clone方法,在clone方法中调用Couple类的c...
2. 使用clone方法 如果对象实现了Cloneable接口,并且重写了clone()方法,那么可以通过调用clone()方法来实现深拷贝。以下是一个示例代码: publicclassDeepCopyimplementsCloneable{@OverridepublicObjectclone()throwsCloneNotSupportedException{DeepCopydeepCopy=(DeepCopy)super.clone();// 对于引用类型的成员变量,需要进行深...
copyUser ¦→ ↑ 栈区(引用) ¦ 堆区(对象) 那么如何才能实现呢?应该使用Java中的拷贝(Object Copy),主要分为:浅拷贝 (Shallow Copy)、深拷贝 (Deep Copy),用的方法为clone()。 二、浅拷贝与深拷贝的区别 1、浅拷贝: 类实现默认的Object.clone()方法,拷贝对象时, ...
深拷贝(DeepCopy):深拷贝是指不仅拷贝对象本身,还会拷贝其引用类型的属性,会重新创建对象。新旧对象的引用不指向同一片内存区域。深拷贝操作后的原对象和拷贝对象不共享任何内存空间,拷贝对象的任何修改不会影响原对象。 二、浅拷贝的使用 要进行对象的拷贝,可以使用Object类中的clone()方法,使用clone()方法,必须实现...
② 覆盖clone()方法,可见性提升为public。 @Data publicclassPersonimplementsCloneable { private String name; private Integer age; private Address address; @Override protected Objectclone()throws CloneNotSupportedException { returnsuper.clone(); }
使用Object.clone()方法:Object类提供了一个受保护的clone()方法,可以用于创建对象的浅拷贝。如果要实现深拷贝,需要在要进行拷贝的对象类中实现Cloneable接口,并重写clone()方法,在clone()方法中创建新的对象,并将原对象的属性值赋给新对象的属性。 示例代码: ...
import java.io.*; public class MyClass implements Serializable { private int value; private MyClass reference; public MyClass deepCopy() { try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); ByteArrayInputStream bis = new ByteArra...