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

郑州做网站优化最好的公司合肥建筑公司

郑州做网站优化最好的公司,合肥建筑公司,怎么让自己上百度,小学生做甜品的网站Person p1 new Person(10);Person p2 p1;p2.age 20;System.out.println(p1p2); // trueSystem.out.println(p1.age); // 20 这种做法只是复制了对象的地址,即两个变量现在是指向了同一个对象,任意一个变量,操作了对象的属性,都…
        Person p1 = new Person(10);Person p2 = p1;p2.age = 20;System.out.println(p1=p2); // trueSystem.out.println(p1.age); // 20

这种做法只是复制了对象的地址,即两个变量现在是指向了同一个对象,任意一个变量,操作了对象的属性,都会影响到另一个变量
 

这中对同一个对象操作,当然算不上真正的复制,所以引用拷贝并不算对象拷贝,所谓的对象拷贝一般就是指浅拷贝和深拷贝

浅拷贝

在java中Object提供了一个clone()方法,看名字就是它和对象拷贝有关,该方法访问修饰符为protected,如果子类不重写该方法,并将其声明为public,那外部就调用不了,对象的clone().

class Person implements Cloneable {public int age;public Person(int age) {this.age = age;}@Overridepublic Person clone() {try {return (Person) super.clone();  } catch (CloneNotSupportedException e) {throw new RuntimeException(e);}}
}

子类在重写时直接调用Object的clone()即可,它是native方法,底层实现了拷贝对象的逻辑,注意子类一定得实现Cloneable接口,否则调用clone()时,会抛出异常,这是java的规定。

        Person p1 = new Person(10);Person p2 = p1;p2.age = 20;System.out.println(p1=p2); // falseSystem.out.println(p1.age); // 10

现在我们调用clone()方法来实现,发现两个变量指向的已经是不同的对象各自改属性,也不会影响到另一个对象,看起来效果很好。

不过有一个问题,如果拷贝对象中有属性是引用类型,那这种浅拷贝的方式,只会复制该属性的引用地址,即拷贝对象和原对象的属性,都指向了同一个对象,如果对这个属性进行一些操作,则会影响到另一个对象的属性,若想将对象中的引用类型属性也进行拷贝,那就得用深拷贝了。

深拷贝

class Person implements Cloneable {public int age;public int[] arr = new int[]{1,2,3}public Person(int age) {this.age = age;}@Overridepublic Person clone() {try {Person person = (Person) super.clone();  person.arr = this.arr.clone();return perosn;} catch (CloneNotSupportedException e) {throw new RuntimeException(e);}}
}

我们将clone()方法稍微修改一下,clone()出对象之后,我们再对对象的属性,进行一次拷贝。

这样就完成了属性的复制,此时对象中的属性也指向了不同的对象实例。

总结

引用拷贝只是复制对象的地址,并不会创建一个新的对象

浅拷贝会创建一个对象,并进行属性的复制,不过对引用类型的属性,只会复制其对象地址

深拷贝则是完全复制整个对象,包括引用类型的属性

都是通过clone(),在实际开发中,不建议大家使用该方法,因为他有抛出异常的风险,如果真的想让对象提供拷贝功能,可以自己编写其他方法来实现


文章转载自:

http://dllMyQZ2.zynjt.cn
http://KqMF5rnj.zynjt.cn
http://camOHYuw.zynjt.cn
http://7A9V4Jpw.zynjt.cn
http://SU6ls2aw.zynjt.cn
http://TKY3j5VS.zynjt.cn
http://ATM2eVvF.zynjt.cn
http://pDNboFNX.zynjt.cn
http://Pv5R5e18.zynjt.cn
http://oaZ59td4.zynjt.cn
http://apOfy34L.zynjt.cn
http://l1NL61tg.zynjt.cn
http://0G60mhMv.zynjt.cn
http://8wOmpRRi.zynjt.cn
http://vfep4AeE.zynjt.cn
http://16Gyw11i.zynjt.cn
http://nh9ModU8.zynjt.cn
http://3F5usvZ3.zynjt.cn
http://XAFlAmdY.zynjt.cn
http://97ANdT71.zynjt.cn
http://Zrzkcx6Q.zynjt.cn
http://8kgJjgwE.zynjt.cn
http://R0LLyXyM.zynjt.cn
http://FivCSrH3.zynjt.cn
http://wVSYmyLk.zynjt.cn
http://lJ0g8sfj.zynjt.cn
http://isIyGOrQ.zynjt.cn
http://03lJLp3E.zynjt.cn
http://bKQMsFiX.zynjt.cn
http://VON68tx3.zynjt.cn
http://www.dtcms.com/wzjs/770843.html

相关文章:

  • 昆山品牌网站企业购
  • seo网站诊断方案福州网站开发私人
  • 为网站做seo网业协同
  • net framework可以用来做网站吗摄影网站的需求分析
  • 定制网站与模板建站维护中国企业500强榜单山东
  • 常用的网站都有哪些法与家国建设征文网站
  • 网站备案要邮寄资料吗江苏省交通建设质监网站
  • 网站logo一般多大wordpress如何升级
  • 网站开发用什么框架好数据分析师需要学哪些课程
  • 网站建设与实践网站建设手机银行修改登录密码
  • 对网站建设的看法深圳app外包公司排行榜
  • 蓄电池回收网站建设制作游戏的平台
  • 高端网站建设要多少钱如何自己做自己的网站
  • 做酒店网站所用到的算法如何使用ps做网站
  • 上海网站建设网页制作免费域名分发
  • 触摸网站手机济南建设网站 概况
  • 建设网站一定需要云服务器么一个域名怎么做网站
  • 负责网站建设免费装修设计软件哪个好
  • 郑州做网站公司电话建设旅游业网站目的
  • 高端的网站名称事件营销的案例
  • 海口网站建设运营关键词优化心得
  • 百度可以建网站吗网站开发人员 生活
  • 广州 网站制作公司 网络服务承德信息港
  • 广州网站制作公司联系方式运维工程师培训
  • 网站建设销售业绩任务做网站前期预算
  • 上海网站建设空间杭州建设厅特种作业证
  • 东莞网站建设设wordpress注册不上
  • 电子商城网站建设方案河南最新新闻事件今天
  • 网站建设实质兰州网络推广范文
  • 天河建网站公司六安先锋网