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

个人投资公司注册条件wordpress图片优化加速

个人投资公司注册条件,wordpress图片优化加速,手机微信网站怎么做的,广告设计图片及解析浅拷贝 浅拷贝会创建一个新的对象,复制该对象的基本类型引用,但不复制该对象内的其他对象引用。一个对象要支持浅拷贝,需要实现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/839630.html

相关文章:

  • 网站是否上线divi wordpress json
  • 怎么对网站做seo优化网站模板修改工具
  • 建设企业网站得花多少钱机械加工网配件销售网
  • 长春网站开发报价开发工具选项卡在哪
  • 深圳网站建设哪家比较好长沙有哪些知名网站
  • 个人网站做什么资源赚钱坪山网站的建设
  • 网站带数据库下载wordpress编辑栏不见了
  • iis发布网站无法访问做哪些网站比较赚钱
  • 深圳商业网站建设天眼查 企业查询网页
  • 做购物网站的初衷云天下网站建设
  • 七米网站开发公司网站开发设计
  • 宁波做亚马逊网站网站如何做超链接
  • 做电影网站赚钱知乎科技创新作文
  • 惠州做网站开发网站个人备案流程
  • 如何自己制作免费网站解决方案网站设计
  • 北京建站公司兴田德润信任徐汇微信手机网站制作
  • 网站建设免费教程wordpress头像怎么设置
  • 赣州网站设计哪家强wordpress标签页样式
  • 网站建设网页设计培训班seo上首页
  • 广州商城网站建设地址查建设施工资质的网站
  • 如何把图片放到网站后台高端网站建设,恩愉科技
  • 如何做家教网站如何建视频网站
  • 服务器公司网站东莞网站关键词优化怎么做
  • 网站建设咸阳环保科技东莞网站建设
  • 网站建设:博采网络网页设计论文引言
  • 内网网站搭建工具网站icon怎么设置
  • 网站开发 实习报告哈尔滨公共资源交易中心官网
  • 网站开发员工资本地主机做网站服务器
  • 餐饮企业网站模板广州市手机网站建设公司
  • 网站建设 常州天眼企业信息查询