由CloneDemo类可以看出,没有重写clone方法,对象中的引用数据类型只是复制了该引用数据类型的引用,并没有在内存空间中开辟空间复制该引用数据类型,即对该引用数据类型进行了浅拷贝而不是深拷贝。 packageJDKSource.lang;publicclassCloneDemoimplementsCloneable{privateintnum;privateStringname;privateHelperhelper;publicCloneD...
Object对象有个clone()方法,实现了对象中各个属性的复制,但它的可见范围是protected的,所以实体类使用克隆的前提是: ① 实现Cloneable接口,这是一个标记接口,自身没有方法。 ② 覆盖clone()方法,可见性提升为public。 @Data publicclassPersonimplementsCloneable { private String name; private Integer age; private ...
clone是浅拷贝。 这里说浅拷贝是指clone后ArrayList中的每一个元素都指向了原先元素的引用。所以一旦改变一个数组的元素另一个数组也会变化。 下面的代码用StringBuilder来说明问题应该很好理解 Java本身不直接提供深拷贝的接口需要自己实现。自己手动将ArrayList的中的每个元素创建一个副本。 如果是自己设计的类可以自己覆...
2 浅拷贝 2.1 "=" 2.2 clone 2.2.1 clone深拷贝 2.2.2 clone浅拷贝 3 深拷贝 3.1 clone 3.2 序列化和反序列化 1 定义 浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存, 所以如果其中一个对象改变了这个地址,就会影响到另一个对象。 深拷贝是将一个对象从内存中完整的拷贝...
在上面两个例子中,拷贝是通过覆写Object.clone方法来完成的,但如果覆写这个方法,就需要类能够实现Cloneable接口,否则在调用clone时会出现CloneNotSupportedException异常。不过接口仅仅是做个标记,标记这个类是支持clone方法的。 无论是写深拷贝还是写浅拷贝,基本都是通过clone方法来进行的。因此记住以下几点你就会写clone...
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在克隆(Clone)操作中经常遇到的两个概念,它们描述了克隆操作对于对象内部引用的处理方式。 浅拷贝(Shallow Copy): 浅拷贝指在克隆操作中,只复制对象本身以及对象内部的基本数据类型的属性,而不复制对象内部的引用类型的属性。
深拷贝:A与B是两个对象,它们之间不存在关联,修改A对B毫无影响。它们相互独立。 为和会有深拷贝与浅拷贝 浅拷贝实例代码(拷贝自cs-note) public class ShallowCloneExample implements Cloneable { private int[] arr; public ShallowCloneExample() {
Personp=newPerson(23,"zhang");Personp1=(Person)p.clone();Stringresult=p.getName()==p1.getName()?"clone是浅拷贝的":"clone是深拷贝的";System.out.println(result); 打印结果为: clone是浅拷贝的 所以,clone方法执行的是浅拷贝, 在编写程序时要注意这个细节。
Java clone 浅拷贝和深拷贝 实现Cloneable 方式 浅拷贝 @AllArgsConstructor public class Result implements Serializable, Cloneable { @Getter @Setter private int code; @Getter @Setter private String message; @Getter @Setter private Data data; @Override...
浅拷贝和深拷贝是 Java 初中级面试中经常会被问到的一个问题,两个就像是兄弟俩,一个调皮一个乖巧,现在让我们一起来探索它们的奇妙之处! 特别说明:不论是浅拷贝还是深拷贝,都可以使用Object类的clone方法来实现,代码如下: 复制 protected native Object clone() throws CloneNotSupportedException; ...