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

京东网站设计特点百度权重排名查询

京东网站设计特点,百度权重排名查询,天辰建设工程信息网,asp.net获取网站地址浅拷贝 浅拷贝会创建一个新的对象,复制该对象的基本类型引用,但不复制该对象内的其他对象引用。一个对象要支持浅拷贝,需要实现Cloneable接口,不然在调用clone()方法时会抛出异常 protected Object clone() throws CloneNotSuppo…

浅拷贝

浅拷贝会创建一个新的对象,复制该对象的基本类型引用,但不复制该对象内的其他对象引用。一个对象要支持浅拷贝,需要实现Cloneable接口,不然在调用clone()方法时会抛出异常

    protected Object clone() throws CloneNotSupportedException {if (!(this instanceof Cloneable)) {throw new CloneNotSupportedException("Class " + getClass().getName() +" doesn't implement Cloneable");}return internalClone();}

看个简单的demo

public class ShallowCopy implements Cloneable {int i = 10;String str = "ShallowCopy";Shallow shallow = new Shallow();public static class Shallow {String shallow = "shallow";}public static void testShallowCopy() {ShallowCopy shallowCopy = new ShallowCopy();try {ShallowCopy shallowCopyClone = (ShallowCopy) shallowCopy.clone();LogUtil.info("ShallowCopy", "(shallowCopy == shallowCopyClone) = " + (shallowCopy == shallowCopyClone));LogUtil.info("ShallowCopy", "(shallowCopy.equals(shallowCopyClone)) = " + (shallowCopy.equals(shallowCopyClone)));LogUtil.info("ShallowCopy", "(shallowCopy.shallow == shallowCopyClone.shallow) = " + (shallowCopy.shallow == shallowCopyClone.shallow));LogUtil.info("ShallowCopy", "(shallowCopy.shallow.equals(shallowCopyClone.shallow)) = " + (shallowCopy.shallow.equals(shallowCopyClone.shallow)));} catch (CloneNotSupportedException e) {throw new RuntimeException(e);}}
}

打印结果如下

2025-03-13 16:53:25.564   (shallowCopy == shallowCopyClone) = false
2025-03-13 16:53:25.564   (shallowCopy.equals(shallowCopyClone)) = false
2025-03-13 16:53:25.564   (shallowCopy.shallow == shallowCopyClone.shallow) = true
2025-03-13 16:53:25.564   (shallowCopy.shallow.equals(shallowCopyClone.shallow)) = true

我们发现shallowCopyshallowCopyClone指向不同的对象,但是里面的shallow却是同一个。如果要实现两个shallowCopyshallowCopyClone两个完全不同的对象,也即是要实现深拷贝,有两个办法,下文介绍两种方法

深拷贝

  1. 内部的对象引用所属类也继承clone接口,重写clone()方法,例如
public class ShallowCopy implements Cloneable {int i = 10;String str = "ShallowCopy";Shallow shallow = new Shallow();@NonNull@Overrideprotected Object clone() throws CloneNotSupportedException {ShallowCopy cloned = (ShallowCopy)super.clone();cloned.shallow = (Shallow)shallow.clone();return cloned;}public static class Shallow implements Cloneable {String shallow = "shallow";@NonNull@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}}public static void testShallowCopy() {ShallowCopy shallowCopy = new ShallowCopy();try {ShallowCopy shallowCopyClone = (ShallowCopy) shallowCopy.clone();LogUtil.info("ShallowCopy", "(shallowCopy == shallowCopyClone) = " + (shallowCopy == shallowCopyClone)); // falseLogUtil.info("ShallowCopy", "(shallowCopy.equals(shallowCopyClone)) = " + (shallowCopy.equals(shallowCopyClone))); // falseLogUtil.info("ShallowCopy", "(shallowCopy.shallow == shallowCopyClone.shallow) = " + (shallowCopy.shallow == shallowCopyClone.shallow)); // falseLogUtil.info("ShallowCopy", "(shallowCopy.shallow.equals(shallowCopyClone.shallow)) = " + (shallowCopy.shallow.equals(shallowCopyClone.shallow))); // false} catch (CloneNotSupportedException e) {throw new RuntimeException(e);}}
}

返回结果

2025-03-13 17:14:09.906   (shallowCopy == shallowCopyClone) = false
2025-03-13 17:14:09.906   (shallowCopy.equals(shallowCopyClone)) = false
2025-03-13 17:14:09.906   (shallowCopy.shallow == shallowCopyClone.shallow) = false
2025-03-13 17:14:09.906   (shallowCopy.shallow.equals(shallowCopyClone.shallow)) = false

但这个方法有个弊端,就是如果引用对象的链路比较深,例如 A 引用 B,B 引用 C,C 引用 D,甚至更深,就需要重写很多clone()方法,不易于维护.

值得注意的是Shallow类里面的shallow变量,它是一个String类型的对象引用,但是却可以不用实现clone接口实现深拷贝。原因是String是不可变的,修改String类型都会返回一个新对象,参考文档String 基础知识

  1. 使用Serializable序列化实现深拷贝

需要注意的是引用对象的类型也要实现Serializable接口,不然后报错

public class ShallowCopy implements Cloneable, Serializable {public static class Shallow implements Cloneable, Serializable {}
}

如果Shallow没有实现Serializable接口,则会出现java.io.NotSerializableException。接着使用IO实现序列化和反序列化

    public ShallowCopy deepClone() {ShallowCopy deepClone = null;try {ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(this);ByteArrayInputStream bio = new ByteArrayInputStream(bos.toByteArray());ObjectInputStream ois = new ObjectInputStream(bio);deepClone = (ShallowCopy) ois.readObject();} catch (IOException | ClassNotFoundException e) {throw new RuntimeException(e);}return deepClone;}

结果打印

    public static void testDeepCopy() {ShallowCopy shallowCopy = new ShallowCopy();ShallowCopy shallowCopyDeepClone = shallowCopy.deepClone();LogUtil.info("ShallowCopy", "(shallowCopy == shallowCopyDeepClone) = " + (shallowCopy == shallowCopyDeepClone)); // falseLogUtil.info("ShallowCopy", "(shallowCopy.equals(shallowCopyDeepClone)) = " + (shallowCopy.equals(shallowCopyDeepClone))); // falseLogUtil.info("ShallowCopy", "(shallowCopy.shallow == shallowCopyDeepClone.shallow) = " + (shallowCopy.shallow == shallowCopyDeepClone.shallow)); // falseLogUtil.info("ShallowCopy", "(shallowCopy.shallow.equals(shallowCopyDeepClone.shallow)) = " + (shallowCopy.shallow.equals(shallowCopyDeepClone.shallow))); // false}
http://www.dtcms.com/wzjs/522616.html

相关文章:

  • 网站开发用什么编程下载百度网盘
  • 网站做附件下载地址如何制作一个网站
  • 如何构建网站西安网站制作公司
  • 低价网站建设推广报价网站制作方案
  • 网站建设哪家最专业应用商店app下载
  • 制作图网址seo 的作用和意义
  • 搭建网站需要多少钱如何做网站 新手 个人 教程
  • 青岛 生物类网站建设旅游网站的网页设计
  • 做网站前端开发的必备软件怎样加入网络营销公司
  • 学校网站建设流程步骤廊坊快速排名优化
  • 做别人公司的网站违法吗福州seo经理招聘
  • 大通网站建设在seo优化中
  • 在线教育网站开发四川seo排名
  • 中山外贸网站开发价格2023免费网站推广大全
  • 厦门市政府网站群建设济南谷歌推广
  • 视频网站开发防止盗链淘宝关键词优化技巧教程
  • java做网站是不是过时了网络营销环境分析主要包括
  • 个人博客网页设计论文郑州见效果付费优化公司
  • 阿里巴巴 商城网站怎么做凡科建站的免费使用
  • 网页设计基础课程设计问题反馈海口关键词优化报价
  • 谷歌提交网站入口晋江友情链接是什么意思
  • 市场营销经典案例广州灰色优化网络公司
  • 建设银行网站维修图片上海网站制作推广
  • 可做产品预售的网站安卓aso优化工具
  • 做黑网站网站推广方式
  • 网站建设是哪个专业seo关键词排名系统
  • postgresql做网站用什么环境怎么创建网页链接
  • 泰州网站建设与网页制作公关公司排行榜
  • 服装设计自学关键词优化案例
  • 电商网站系统建设考试一件代发48个货源网站