Java中同类型对象拷贝有两种方式:浅拷贝和深拷贝。

浅拷贝:复制对象的引用,新对象与原对象共享同一个引用,修改其中一个对象会影响到另一个对象。可以通过实现Cloneable接口并重写clone()方法来实现浅拷贝。

例如:

class Person implements Cloneable {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
    @Override
    public Person clone() throws CloneNotSupportedException {
        return (Person) super.clone();
    }
}

public class Test {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person p1 = new Person("Tom", 20);
        Person p2 = p1.clone();
        
        System.out.println(p1.getName() + " " + p1.getAge());  // Tom 20
        System.out.println(p2.getName() + " " + p2.getAge());  // Tom 20
        
        p1.setAge(30);
        
        System.out.println(p1.getName() + " " + p1.getAge());  // Tom 30
        System.out.println(p2.getName() + " " + p2.getAge());  // Tom 20
    }
}

深拷贝:复制对象的所有属性,新对象与原对象互不影响。可以通过序列化和反序列化、手动递归复制等方式实现深拷贝。

例如:

import java.io.*;

class Person implements Serializable {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
    public Person deepClone() throws IOException, ClassNotFoundException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(this);
        
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bais);
        return (Person) ois.readObject();
    }
}

public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Person p1 = new Person("Tom", 20);
        Person p2 = p1.deepClone();
        
        System.out.println(p1.getName() + " " + p1.getAge());  // Tom 20
        System.out.println(p2.getName() + " " + p2.getAge());  // Tom 20
        
        p1.setAge(30);
        
        System.out.println(p1.getName() + " " + p1.getAge());  // Tom 30
        System.out.println(p2.getName() + " " + p2.getAge());  // Tom 20
    }
}
``
java 同类型对象拷贝

原文地址: https://www.cveoy.top/t/topic/hj2A 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录