赞
踩
浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是在对象复制过程中常用的概念。
选择使用浅拷贝还是深拷贝取决于实际需求。如果希望复制对象后的修改不会影响原始对象,应该使用深拷贝;如果可以接受复制对象的修改影响原始对象,或者对象较大且复制性能要求高,则可以使用浅拷贝。
综上所述:
浅拷贝:
结果是,原始对象和复制对象之间共享相同的引用,对原始对象的修改会影响到复制对象,但是对于引用类型字段指向的对象本身的修改则不会影响。
深拷贝:
结果是,原始对象和复制对象之间没有任何引用关系,彼此独立存在,修改其中一个对象不会影响另一个对象。
可以这么理解,从A这里复制出来了一个B,此时我修改了A的对象,而B的对象也跟着改变,这则是浅拷贝。相反,我修改了A的对象,而B的对象不跟着改变,这便是深拷贝。
- //创建一个类Person
- class Person {
- String name;
- int age;
-
- // 构造函数
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
-
- // 重写toString方法
- @Override
- public String toString() {
- return "Person [name=" + name + ", age=" + age + "]";
- }
- }
-
- public class myclass {
- public static void main(String[] args) {
- // 创建一个Person对象
- Person person1 = new Person("John", 25);
-
- // 浅拷贝示例
- Person person2 = person1; // 直接将person1的引用赋值给person2
- person2.age = 30; // 修改person2的属性,也会影响到person1
-
- System.out.println("浅拷贝示例:");
- System.out.println("person1: " + person1);//运行结果:person1: Person [name=John, age=30]
- System.out.println("person2: " + person2);//运行结果:person2: Person [name=John, age=30]
-
- // 深拷贝示例
- Person person3 = new Person(person1.name, person1.age); // 创建新的Person对象,将person1的属性值复制给person3
- person3.age = 35; // 修改person3的属性,不会影响到person1
-
- System.out.println("深拷贝示例:");
- System.out.println("person1: " + person1);//运行结果:person1: Person [name=John, age=30]
- System.out.println("person3: " + person3);//运行结果:person3: Person [name=John, age=35]
- }
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。