当前位置:实例文章 » JAVA Web实例» [文章]Java对象深拷贝、浅拷贝之枚举类型

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 中两个重要的概念,它们决定了对象之间的关系。在进行深拷贝时,需要复制对象的实际数据,而不是仅仅复制引用值。枚举类型也需要被视为一个整数值,因此在进行深拷贝时,也需要被复制。

通过上面的示例代码,可以看出浅拷贝和深拷贝之间的区别。在浅拷贝中,两个对象共享同样的内存空间,而在深拷贝中,每个对象都有自己的独立内存空间。

相关标签:jvm算法java开发语言
其他信息

其他资源

Top