java实现对象的浅复制与深复制

浅复制:只对对象以及变量值进行复制,引用对象地址不变
深复制:不仅对对象以及变量值进行复制,对引用对象也复制
import java.io.*;

/**
 * 实现对象的浅复制与深复制
 */
public class Dancer implements Cloneable, Serializable {

    private static final long serialVersionUID = -5429953184638265377L;

    private String name;
    private Dancer partner;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Dancer getPartner() {
        return partner;
    }

    public void setPartner(Dancer partner) {
        this.partner = partner;
    }

    public Dancer deepClone() {
        Dancer target = null;
        byte[] byteArr = null;
        try(
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ObjectOutputStream oos = new ObjectOutputStream(baos);
        ) {
            oos.writeObject(this);
            byteArr = baos.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try(
                ByteArrayInputStream bais = new ByteArrayInputStream(byteArr);
                ObjectInputStream ois = new ObjectInputStream(bais);
        ) {
            target = (Dancer) ois.readObject();

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return target;
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        Dancer d1 = new Dancer();
        d1.setName("朱明远");
        Dancer d2 = new Dancer();
        d2.setName("刘敏霞");
        d1.setPartner(d2);
        System.out.println("Partner:" + d2.hashCode());
        //浅复制
        Dancer shallow = (Dancer) d1.clone();
        System.out.println("浅复制:" + shallow.getPartner().hashCode());
        //深复制
        Dancer deep = d1.deepClone();
        System.out.println("深复制:" + deep.getPartner().hashCode());
    }
}

猜你喜欢

转载自blog.csdn.net/m0_37732829/article/details/104329338