Java 中的对象拷贝分为浅拷贝和深拷贝的简单理解

2023-06-14 0 652

介绍厚薄复本,先介绍这些是不容变表达式

Java 中的对象拷贝分为浅拷贝和深拷贝的简单理解

在 Java 中,此基础类别中的 boolean、byte、char、short、int、float、long、double 这六种类别的值是气门的,但它这类是不容变的。除此以外,除了 String 类别和包装袋类别,它的值和这类都是不容变的。

比如:

String s = “Hello”; s = s + ” World”;

在那个范例中,尽管看上去是将数组 “Hello” 和 ” World” 堆叠出来Kozhikode表达式 s,事实上是建立了三个捷伊数组第一类 “Hello World”,并将其Kozhikode表达式 s。原本的数组第一类 “Hello” 和 ” World” 并没被修正。

浅复本(Shallow Copy)

浅复本是将原初第一类的提及导入到新第一类中,三个第一类共享资源同几块物理门牌号。因而,当修正当中三个第一类时,另三个第一类也会受到影响。在 Java 中,能透过同时实现 Cloneable USB和改写 Object 类中的 clone() 形式来同时实现浅复本。比如:

public class Person implements Cloneable { private String name; private int age; public Object clone() throws CloneNotSupportedException { return super.clone(); } }

单纯归纳:此种形式,碰到不容能表达式,就相等于全然拷贝了这份;单碰到了气门表达式,复本往后的操作符却是对准的原表达式门牌号,所以存在复本不干净,原第一类表达式,克隆的也会变。

深复本(Deep Copy)

深复本是将原初第一类的所有属性和提及第一类导入到新第一类中,新第一类和原初第一类全然独立,不共享资源任何物理门牌号。因而,当修正当中三个第一类时,另三个第一类不会受到影响。在 Java 中,能透过同时实现 Serializable USB和使用序列化来同时实现深复本。比如:

public class Person implements Serializable { private String name; private int age; privateAddress address;public Person deepCopy() throws IOException, ClassNotFoundException { ByteArrayOutputStream bos =new ByteArrayOutputStream(); ObjectOutputStream oos = newObjectOutputStream(bos); oos.writeObject(this); ByteArrayInputStream bis = newByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois =new ObjectInputStream(bis); return (Person) ois.readObject(); } }

单纯归纳:此种形式,所有表达式,就相等于全然拷贝了这份,所以需要同时实现SerializableUSB。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务