Java对象深拷贝、浅拷贝之枚举类型
发布人:shili8
发布时间:2025-02-05 17:19
阅读次数:0
**Java 对象深拷贝与浅拷贝**
在 Java 中,对象的拷贝是指将一个对象的内容复制到另一个对象中。根据拷贝方式不同,可以分为浅拷贝和深拷贝两种。
### 浅拷贝浅拷贝是指仅仅复制对象引用的值,而不是实际的数据。也就是说,两个对象共享同样的内存空间。
**示例代码**
javapublic class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class Main { public static void main(String[] args) { Person person1 = new Person("John",30); Person person2 = person1; // 浅拷贝 System.out.println(person1.getName()); // John System.out.println(person2.getName()); // John person1.setName("Jane"); person1.setAge(31); System.out.println(person1.getName()); // Jane System.out.println(person2.getName()); // Jane } }
在上面的示例中,`person1` 和 `person2` 共享同样的内存空间。修改 `person1` 的属性也会影响到 `person2`。
### 深拷贝深拷贝是指复制对象的实际数据,而不是仅仅复制引用值。也就是说,每个对象都有自己的独立内存空间。
**示例代码**
javaimport java.util.Date; public class Person { private String name; private int age; private Date birthDate; public Person(String name, int age) { this.name = name; this.age = age; this.birthDate = new Date(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthDate() { return birthDate; } } public class Main { public static void main(String[] args) { Person person1 = new Person("John",30); Person person2 = deepCopy(person1); // 深拷贝 System.out.println(person1.getName()); // John System.out.println(person2.getName()); // John person1.setName("Jane"); person1.setAge(31); System.out.println(person1.getName()); // Jane System.out.println(person2.getName()); // John } public static Person deepCopy(Person person) { Person copy = new Person(person.getName(), person.getAge()); copy.setBirthDate(new Date(person.getBirthDate().getTime())); return copy; } }
在上面的示例中,`person1` 和 `person2` 有自己的独立内存空间。修改 `person1` 的属性不会影响到 `person2`。
### 枚举类型的深拷贝枚举类型是 Java 中的一个特殊类型,它们可以被视为一个整数值。因此,在进行深拷贝时,枚举类型也需要被复制。
**示例代码**
javapublic enum Color { RED, GREEN, BLUE} public class Person { private String name; private int age; private Color favoriteColor; public Person(String name, int age) { this.name = name; this.age = age; this.favoriteColor = Color.RED; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Color getFavoriteColor() { return favoriteColor; } } public class Main { public static void main(String[] args) { Person person1 = new Person("John",30); Person person2 = deepCopy(person1); // 深拷贝 System.out.println(person1.getName()); // John System.out.println(person2.getName()); // John person1.setName("Jane"); person1.setAge(31); System.out.println(person1.getName()); // Jane System.out.println(person2.getName()); // John person2.setFavoriteColor(Color.GREEN); System.out.println(person1.getFavoriteColor()); // RED } public static Person deepCopy(Person person) { Person copy = new Person(person.getName(), person.getAge()); copy.setFavoriteColor(person.getFavoriteColor()); return copy; } }
在上面的示例中,`person1` 和 `person2` 有自己的独立内存空间。修改 `person1` 的属性不会影响到 `person2`。
### 总结深拷贝和浅拷贝是 Java 中两个重要的概念,它们决定了对象之间的关系。在进行深拷贝时,需要复制对象的实际数据,而不是仅仅复制引用值。枚举类型也需要被视为一个整数值,因此在进行深拷贝时,也需要被复制。
通过上面的示例代码,可以看出浅拷贝和深拷贝之间的区别。在浅拷贝中,两个对象共享同样的内存空间,而在深拷贝中,每个对象都有自己的独立内存空间。