网站我优化,黄渡网站建设,微信怎么推广自己的产品,wordpress中文前端作者简介#xff1a; zoro-1#xff0c;目前大一#xff0c;正在学习Java#xff0c;数据结构等 作者主页#xff1a; zoro-1的主页 欢迎大家点赞 #x1f44d; 收藏 ⭐ 加关注哦#xff01;#x1f496;#x1f496; 浅拷贝与深拷贝 浅拷贝浅拷贝定义浅拷贝代码演示浅… 作者简介 zoro-1目前大一正在学习Java数据结构等 作者主页 zoro-1的主页 欢迎大家点赞 收藏 ⭐ 加关注哦 浅拷贝与深拷贝 浅拷贝浅拷贝定义浅拷贝代码演示浅拷贝的特点 深拷贝深拷贝定义深拷贝代码演示深拷贝特点 浅拷贝
之前我们学了数组的拷贝那么对象如何进行拷贝呢
浅拷贝定义 浅拷贝是一种复制对象的方法在这种方法中只复制对象的引用或指针而不是对象本身的内容。 浅拷贝代码演示
class Hia{int a6;
}
class Animal {String nameanimal;int age0;Hia hianew Hia();public Animal(String name, int age) {this.name name;this.age age;}Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}
public class Text4 {public static void main(String[] args) throws CloneNotSupportedException {Animal dognew Animal(dog,5);Animal dogcopy(Animal) dog.clone();}
}
代码讲解 初始化Animal类为dog对象现在想要copy一份dog对象就要了解clone方法他是object类里面的方法也就是Animal的父类的方法因为所有类都是继承object类这个类是由protected修饰所以我们不能直接调用他的最大访问权限是不同包下的子类对象且只能用super访问所以要在定义一个不带static修饰的方法下面访问我这里采用的是重写父类的clone方法返回super.clone();clone的返回值对象是object所以要强转为(Animal); 上面的代码运行出来结果还是错的 原因是在java里面只有实现Cloneable接口才说明这个类是支持拷贝的虽然这个接口什么都没有); 浅拷贝的特点 特点是他只是将你类里面的变量的值赋值下来不会将你成员对象引用的也赋值一份下面这个图就能很好解释 当然我们也可以用代码直观的看出来
public class Text4 {public static void main(String[] args) throws CloneNotSupportedException {Animal dognew Animal(dog,5);Animal dogcopy(Animal) dog.clone();System.out.println(dog.hia.a);System.out.println(dogcopy.hia.a);dog.hia.a9;System.out.println(dog.hia.a);System.out.println(dogcopy.hia.a);}
}通过运行结果可以看出来我们发现该变原对象的hia.a复制的对象的hia.a也发生了改变这说明复制后的hia和前面指向的是同一个引用 想要将复制里面的引用也复制一份就要用到深拷贝
深拷贝
深拷贝定义 深拷贝是指在拷贝一个对象时创建一个新的对象并将原对象的所有属性值都复制到新对象中而不是简单地复制对象的引用地址。因此在深拷贝后两个对象之间是完全独立的互不影响。深拷贝通常用于需要完全复制原对象的情况例如在多线程环境下操作对象时为了避免不同线程间共享对象导致的数据冲突就需要使用深拷贝。深拷贝是指在拷贝一个对象时创建一个新的对象并将原对象的所有属性值都复制到新对象中而不是简单地复制对象的引用地址。 深拷贝代码演示
class Hia implements Cloneable{int a6;Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}
class Animal implements Cloneable{String nameanimal;int age0;Hia hianew Hia();public Animal(String name, int age) {this.name name;this.age age;}Overrideprotected Object clone() throws CloneNotSupportedException {Animal animal(Animal) super.clone();animal.hia(Hia) animal.hia.clone();return animal;}
}
public class Text4 {public static void main(String[] args) throws CloneNotSupportedException {Animal dognew Animal(dog,5);Animal dogcopy (Animal) dog.clone();System.out.println(dog.hia.a);System.out.println(dogcopy.hia.a);dog.hia.a9;System.out.println(dog.hia.a);System.out.println(dogcopy.hia.a);}
} 代码解释 我的理解是深拷贝是两层浅拷贝现将对象进行一次拷贝然后再将dog对象里面的引用对象拷贝一份赋值给新的对象的里面的引用对象譬如上面的代码重写的clone()方法里面先super.clone()复制一份当前类的对象然后类里面的引用类型Hia调用clone()复制一份再赋值给animal.hia那现在animal就是就是彻底的拷贝了然后返回animal然后改变dog类里面的hia.a打印输出只有dog类里面的改变了 深拷贝特点 深拷贝是一种复制数据的方式它会创建一个完全独立的副本而不是原始数据的引用。深拷贝的特点如下 完全独立深拷贝会创建一个全新的对象而不是原对象的引用。 完整复制深拷贝会复制所有的属性和方法包括对象的嵌套属性和方法。 递归复制如果对象有嵌套属性或方法深拷贝会递归复制嵌套对象的属性和方法。 不受原对象改变影响因为深拷贝生成的对象完全独立所以它不会受到原对象的更改的影响。
需要注意的是深拷贝可能会导致性能问题特别是当数据结构非常复杂时。因为深拷贝会复制所有的属性和方法包括对象的嵌套属性和方法所以可能需要花费大量的时间和内存来完成。 今天的分享到这里就结束了感谢大家支持创作不易希望大家能给博主个三连