当前位置: 首页 > news >正文

漳州做网站最便宜市场策划方案

漳州做网站最便宜,市场策划方案,常州网站公司怎么选,电子商务系统建设网站策划书文章目录1.拷贝的引入1.1引用拷贝1.2对象拷贝2.深拷贝与浅拷贝2.1浅拷贝2.2深拷贝1.拷贝的引入 1.1引用拷贝 创建一个指向对象的引用变量的拷贝 Teacher teacher new Teacher("Taylor",26); Teacher otherteacher teacher; System.out.println(teacher); System…

文章目录

  • 1.拷贝的引入
    • 1.1引用拷贝
    • 1.2对象拷贝
  • 2.深拷贝与浅拷贝
    • 2.1浅拷贝
    • 2.2深拷贝

1.拷贝的引入

1.1引用拷贝

创建一个指向对象的引用变量的拷贝

Teacher teacher = new Teacher("Taylor",26);
Teacher otherteacher = teacher;
System.out.println(teacher);
System.out.println(otherteacher);

输出:

blog.Teacher@355da254
blog.Teacher@355da254

由输出结果可以看出,它们的地址值是相同的,那么它们肯定是同一个对象。teacher和otherteacher的只是引用而已,他们都指向了一个相同的对象Teacher(“Taylor”,26)。 这就叫做引用拷贝
在这里插入图片描述

1.2对象拷贝

创建对象本身的一个副本。

Teacher teacher = new Teacher("Swift",26);
Teacher otherteacher = (Teacher)teacher.clone();
System.out.println(teacher);
System.out.println(otherteacher);

输出:

blog.Teacher@355da254
blog.Teacher@4dc63996

由输出结果可以看出,它们的地址是不同的,也就是说创建了新的对象, 而不是把原对象的地址赋给了一个新的引用变量,这就叫做对象拷贝
在这里插入图片描述

2.深拷贝与浅拷贝

在Java语言里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝。
浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化。
深拷贝则是拷贝了源对象的所有值,所以即使源对象的值发生变化时,拷贝对象的值也不会改变。如下图描述:
在这里插入图片描述

2.1浅拷贝

定义:
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。"里面的对象“会在原来的对象和它的副本之间共享。

简而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象

浅拷贝实例:

public class ShallowCopy {public static void main(String[] args) throws CloneNotSupportedException {Teacher teacher = new Teacher();teacher.setName("Delacey");teacher.setAge(29);Student2 student1 = new Student2();student1.setName("Dream");student1.setAge(18);student1.setTeacher(teacher);Student2 student2 = (Student2) student1.clone();//拷贝System.out.println("拷贝后");System.out.println(student2.getName());System.out.println(student2.getAge());System.out.println(student2.getTeacher().getName());System.out.println(student2.getTeacher().getAge());System.out.println("修改老师的信息后-------------");// 修改老师的信息teacher.setName("Jam");System.out.println(student1.getTeacher().getName());System.out.println(student2.getTeacher().getName());}}class Teacher implements Cloneable {private String name;private int 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;}
}class Student2 implements Cloneable{private String name;private int age;private Teacher teacher;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 Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher = teacher;}@Overridepublic Object clone() throws CloneNotSupportedException {Object object = super.clone();return object;}}

输出

拷贝后
Dream
18
Delacey
29
修改老师的信息后-------------
Jam
Jam

结果分析: 两个引用student1和student2指向不同的两个对象,但是两个引用student1和student2中的两个teacher引用指向的是同一个对象,所以说明是浅拷贝
在这里插入图片描述

2.2深拷贝

定义:
深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。

简而言之,深拷贝把要复制的对象所引用的对象都复制了一遍。

实现深拷贝 实例1:

public class DeepCopy {public static void main(String[] args) throws Exception {Teacher2 teacher = new Teacher2();teacher.setName("Delacey");teacher.setAge(29);Student3 student1 = new Student3();student1.setName("Dream");student1.setAge(18);student1.setTeacher(teacher);Student3 student2 = (Student3) student1.clone();//拷贝System.out.println("拷贝后");System.out.println(student2.getName());System.out.println(student2.getAge());System.out.println(student2.getTeacher().getName());System.out.println(student2.getTeacher().getAge());System.out.println("修改老师的信息后-------------");// 修改老师的信息teacher.setName("Jam");System.out.println(student1.getTeacher().getName());System.out.println(student2.getTeacher().getName());}
}class Teacher2 implements Cloneable {private String name;private int 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;}@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}}class Student3 implements Cloneable {private String name;private int age;private Teacher2 teacher;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 Teacher2 getTeacher() {return teacher;}public void setTeacher(Teacher2 teacher) {this.teacher = teacher;}@Overridepublic Object clone() throws CloneNotSupportedException {// 浅复制时:// Object object = super.clone();// return object;// 改为深复制:Student3 student = (Student3) super.clone();// 本来是浅复制,现在将Teacher对象复制一份并重新set进来student.setTeacher((Teacher2) student.getTeacher().clone());return student;}}

输出结果:

拷贝后
Dream
18
Delacey
29
修改老师的信息后-------------
Jam
Delacey

结果分析:
两个引用student1和student2指向不同的两个对象,两个引用student1和student2中的两个teacher引用指向的是两个对象,但对teacher对象的修改只能影响student1对象,所以说是深拷贝。

下图为 teacher姓名Delacey更改前:
在这里插入图片描述
下图为 teacher姓名Jam更改后:
在这里插入图片描述
利用序列化实现深拷贝:

public class DeepCopyServiable {public static void main(String[] args) throws Exception {Teacher3 t = new Teacher3();t.setName("Taylor");t.setAge(28);Student3 s1 = new Student3();s1.setAge(20);s1.setName("blank space");s1.setTeacher(t);Student3 s2 = (Student3) s1.deepClone();//拷贝System.out.println("拷贝后:");System.out.println(s2.getName());System.out.println(s2.getAge());System.out.println(s2.getTeacher().getName());System.out.println(s2.getTeacher().getAge());System.out.println("---------------------------");t.setName("swift");System.out.println("修改后:");System.out.println(s1.getTeacher().getName());System.out.println(s2.getTeacher().getName());}
}class Teacher3 implements Serializable {private String name;private int 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;}}class Student3 implements Serializable {private String name;private int age;private Teacher3 teacher;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 Teacher3 getTeacher() {return teacher;}public void setTeacher(Teacher3 teacher) {this.teacher = teacher;}public Object deepClone() throws Exception {// 序列化ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(this);// 反序列化ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());ObjectInputStream ois = new ObjectInputStream(bis);return ois.readObject();}
}

输出结果

拷贝后:
blank space
20
Taylor
28
---------------------------
修改后:
swift
Taylor

结果分析:说明用序列化的方式实现了对象的深拷贝

参考博文(侵删):
https://blog.csdn.net/baiye_xing/article/details/71788741
https://www.cnblogs.com/ysocean/p/8482979.html
https://www.cnblogs.com/xinruyi/p/11537963.html

http://www.yayakq.cn/news/629610/

相关文章:

  • php简单购物网站源码大气企业网站
  • 成都市网站建设服务商实力网站建设电话
  • 二次元网站模板广告网站建设网
  • 网站开发产品设计书做北京会所网站哪个好
  • 怎样给一个网站做专题策划专做农产品的网站有哪些
  • 建设网站 关于竣工结算的期限兼职网站建设 开源
  • 关于进行网站建设费用的请示廊坊建网站
  • 如何用模板做公司网站网站空间的选择
  • 怎么登录住房城乡建设部网站行业信息网站
  • 客户问 你们网站怎么做的江门seo代理商
  • 湖南网站营销优化开发网站建设不推广有用吗
  • 网站制作乛薇做网站一般使用什么算法
  • wp网站源码营销策划公司经营范围包括哪些
  • 西宁网站建设兼职做网站时空间的选择
  • 最新的新开传奇网站汽车租赁网站建设
  • 贵州城乡建设厅施工员报名网站茶酒行业网站建设
  • 做网站用什么写汽车网站建设需要多少钱
  • 律师网站建设与维护镇江网站关键字优化公司
  • 青鸟网站开发实例招聘网站开发背景
  • 怎么网站显示翻页代码衡水网站建设选哪家
  • 中国林业网站群建设工程嘉兴做外贸网站的公司
  • 金融公司网站开发自己做app软件开发
  • 公司网站建设站酷网线制作一般包括
  • 网站曝光率望野亭
  • 企业网站建设 cms亚马逊雨林生物
  • 做网站的需要注册商标吗手机网站比例尺寸
  • 个人网站建设网站排名优化湖北企业网站建设公司
  • 凡客建站手机版下载好看又免费的图片素材
  • 黄骗免费网站佛山营销网站建设制作
  • 鄠邑建站 网站建设吉林省建设安全信息网官网