网站内容管理系统源码,制作wordpress分享,网络营销相关理论有哪些,网页美工设计的要点有哪些概念
浅拷贝#xff08;Shallow Copy#xff09;和深拷贝#xff08;Deep Copy#xff09;是在对象复制过程中常用的概念。
浅拷贝是指创建一个新对象#xff0c;并将原始对象的非静态字段的值拷贝到新对象中。如果字段是基本数据类型#xff0c;直接复制其值#xf…概念
浅拷贝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方法Overridepublic 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的引用赋值给person2person2.age 30; // 修改person2的属性也会影响到person1System.out.println(浅拷贝示例);System.out.println(person1: person1);//运行结果person1: Person [nameJohn, age30]System.out.println(person2: person2);//运行结果person2: Person [nameJohn, age30]// 深拷贝示例Person person3 new Person(person1.name, person1.age); // 创建新的Person对象将person1的属性值复制给person3person3.age 35; // 修改person3的属性不会影响到person1System.out.println(深拷贝示例);System.out.println(person1: person1);//运行结果person1: Person [nameJohn, age30]System.out.println(person3: person3);//运行结果person3: Person [nameJohn, age35]}
}