“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
public class Main {
public static void main(String[] args) {
// 创建一个User对象
User user1 = new User("Alice", 20);
// 使用浅拷贝创建User对象的副本
User user2 = (User) user1.clone();
// 输出原始对象和副本对象的信息
System.out.println("Original User: " + user1);
System.out.println("Cloned User: " + user2);
// 修改user2的属性,并输出结果
user2.setAge(22);
System.out.println("Original User after change: " + user1);
System.out.println("Cloned User after change: " + user2);
}
}
// 实现Cloneable接口并定义clone()方法
class User implements Cloneable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + "}";
}
}
这段代码演示了如何在Java中使用浅拷贝。通过实现Cloneable接口并重写clone()方法,我们能够创建一个对象的副本。浅拷贝复制的是对象的引用,如果对象属性是基本数据类型或不可变对象(例如String),则复制效果相当于深拷贝。如果对象属性包含可变对象(非原子类型),浅拷贝将导致问题,因为原对象和副本对象将共享这些属性,所以在这种情况下,我们需要使用深拷贝来避免这种副作用。
评论已关闭