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

注销备案号 网站自己做网站需要买哪些

注销备案号 网站,自己做网站需要买哪些,server 2008 架设网站,兄弟们试试这个网址文章目录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/229917/

相关文章:

  • 东方城乡与住房建设部网站wordpress中文企业模板下载
  • 澄迈网站新闻建设行业门户网站源码
  • 小型门户网站建设硬件配置建设众筹类网站
  • 怎么做像知乎一样的网站美食网站怎么做dw
  • dede手机网站模板下载销售管理系统哪种好一点
  • 陕西优秀的企业门户网站建设做长图的网站
  • 湖南省交通建设质安监督局网站吉林省工伤保险网站
  • 纪检网站建设方案腾讯云服务器
  • 知乎 网站开发工具wordpress 分类目录 图像描述
  • wordpress首页显示字数插件零基础学seo难吗
  • 江西建设监督网新网站wordpress的主机
  • 兼职游戏网站怎么做得力文具网站建设策划书
  • 甘肃省住房和城乡建设厅注册中心网站首页先做网站装修还是先买虚拟主机
  • 建设银行网站打不开用什么浏览器国有平台公司是什么意思
  • 哪个网站可以做相册息烽县住房和城乡建设局网站
  • 网站后台用什么语言合适成为短视频的app有哪些
  • 网站目录是什么分类信息网站织梦模板
  • 推广网站有哪些网站建设框架怎么写
  • 厦门手机网站建设是什么意思抖音网站建设哪家好
  • 全国房地产网站网站项目需要什么
  • html5手机移动app网站制作教程上海网站推广找哪家
  • 实用网站建设期末考试dw做的网站怎么全屏
  • 北京品牌建设网站网站网络推广公司
  • 在线做venn图网站wordpress左侧菜单怎么添加
  • 外包小程序公司杭州优化外包哪里好
  • 网站开发哪里好百度推广竞价技巧
  • 什么是网站前台小公司企业简介怎么写
  • 科技软件公司网站模板下载网站制作技巧
  • 河南网站建设定制成都网站建设详细内容
  • 潮阳网站建设公司想学网站建设优化去哪