java cloneable_java.lang.Cloneable的理解「建议收藏」

java cloneable_java.lang.Cloneable的理解「建议收藏」以前也用过这个接口,那时是直接所有的东西都自己写了,也没发现问题。最近无意间发现这个接口的实现并不是想象中的那样,所以稍微研究了下,给大家分享一下。步骤:1、建立两个简单的POJO:Teacher和Student2、Teacher类实现了Cloneable接口,重写clone方法3、在main方法中建立teacher,然后clone,比较teacher和clone出来的teacherTeacher…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

以前也用过这个接口,那时是直接所有的东西都自己写了,也没发现问题。最近无意间发现这个接口的实现并不是想象中的那样,所以稍微研究了下,给大家分享一下。

步骤:1、建立两个简单的POJO:Teacher和Student

2、Teacher类实现了Cloneable接口,重写clone方法

3、在main方法中建立teacher,然后clone,比较teacher和clone出来的teacher

Teacher类:

public class Teacher implements Cloneable,Serializable{

private String name;

private String sex;

private int age;

private List list;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public List getList() {

return list;

}

public void setList(List list) {

this.list = list;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

protected Teacher clone() throws CloneNotSupportedException {

Teacher t = (Teacher)super.clone();

return t;

}

public Teacher deepClone() throws IOException, ClassNotFoundException

{

ByteArrayOutputStream out = new ByteArrayOutputStream();

ObjectOutputStream temp_out = new ObjectOutputStream(out);

temp_out.writeObject(this);

ByteArrayInputStream input = new ByteArrayInputStream(out.toByteArray());

ObjectInputStream temp_input = new ObjectInputStream(input);

return (Teacher) temp_input.readObject();

}

}

Student类:

public class Student implements Serializable{

private String stName;

private String stSex;

public String getStName() {

return stName;

}

public void setStName(String stName) {

this.stName = stName;

}

public String getStSex() {

return stSex;

}

public void setStSex(String stSex) {

this.stSex = stSex;

}

}

main:

public class MainTest {

public static void main(String[] args) throws CloneNotSupportedException, ClassNotFoundException, IOException {

List list = new ArrayList();

Student st = new Student();

st.setStName(“stname”);

st.setStSex(“f”);

list.add(st);

Teacher te = new Teacher();

te.setAge(19);

te.setList(list);

te.setName(“tename”);

te.setSex(“tesex”);

Teacher cl = te.clone();

cl.setAge(12);

System.out.println(“淺複製”+ (cl == te));

//内存中的地址

System.out.println(cl.getName() == te.getName());

System.out.println(cl.getList() == te.getList());

System.out.println(“source:”+te.getAge()+”<==>clone:”+cl.getAge());

Teacher  deep = te.deepClone();

System.out.println(“深複製”+(cl == te));

System.out.println(deep.getName() == te.getName());

System.out.println(deep.getList() == te.getList());

}

}

输出结果:

淺複製false

true

true

source:19<==>clone:12

深複製false

false

false

从输出结果可以得出的结论:

1、对于浅复制来说,当调用clone方法返回的cl对象跟te对象不是同一个对象(地址不一样),但是内部的对象引用却是引用的相同对象(地址一样);而对于基本类型age(int)来说,克隆的对象cl跟原始对象te不是同一个(如果是同一个的话,修改任何一个,另外对象的内容也会变化)

2、对于深复制来说,克隆出来的对象不但跟原始对象不一样(地址不一样),而且内部应用对象也不一样了(地址不一样)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181928.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月14日 下午9:46
下一篇 2022年10月14日 下午10:00


相关推荐

  • libiconv.a_libiptc

    libiconv.a_libiptc来源:’http://dxwang.blog.51cto.com/384651/538113介绍由于历史原因,国际上的各国文字都是依赖于自己本国语言而编码的。后来,随着Internet的出现和各国之间逐渐频繁的文字交流(比如浏览国外的Web页面),编码之间的转换就显得非常重要。这时也出现了一个问题,很多字符在一种编码中出现而没有被另一种编码包含。为了解决这种编码带来的混乱,人们

    2025年6月10日
    4
  • Dynamics CRM ADFS及IFD部署后延长系统注销时间

    Dynamics CRM ADFS及IFD部署后延长系统注销时间DynamicsCRM nbsp 部署 IFD 后 一段时间后登陆状态会失效 系统会提示让你重新登陆 可以通过延长失效时间来规避 Set ADFSRelyingP Targetname CRMIFDRelyin TokenLifetim CRMIFDRelayi nbsp 是你的 ADFS 管理器中 RelyingParty 中

    2026年3月19日
    2
  • cshtml中文乱码

    cshtml中文乱码有时候在写页面的时候发现自己已经把页面的编码设置为charset="UTF-8"了还是发生了中文乱码,这是为什么呢?1.在桌面新建一个txt文档,把代码拷贝进去2.选择另存为“xxx.cshtml”,注意设置编码格式为***UTF-8***如下图:3.把生成的文件替换掉源文件4.ok,发现已经正常显示中文了…

    2022年6月29日
    64
  • ajax html例子,AJAX实例[通俗易懂]

    ajax html例子,AJAX实例[通俗易懂]AJAX实例实例一:一个简单的AJAX实例创建一个简单的XMLHttpRequest,从一个TXT文件中返回数据实例functionloadXMLDoc(){varxmlhttp;if(window.XMLHttpRequest){//IE7+,Firefox,Chrome,Opera,Safari浏览器执行代码xmlhttp=newXMLHttpRequest();}els…

    2022年8月16日
    10
  • java 时间戳字符串_Java获取当前时间戳/时间戳转换

    java 时间戳字符串_Java获取当前时间戳/时间戳转换@date2017/11/25*/publicclassApp{publicstaticvoidmain(String[]args){//精确到毫秒//获取当前时间戳System.out.println(System.currentTimeMillis());System.out.println(Calendar.getInstance().getTimeInMillis());Sy…

    2022年4月29日
    341
  • Java实现Excel导入和导出,看这一篇就够了(珍藏版)

    Java实现Excel导入和导出,看这一篇就够了(珍藏版)前言最近抽了两天时间,把Java实现表格的相关操作进行了封装,本次封装是基于POI的二次开发,最终使用只需要调用一个工具类中的方法,就能满足业务中绝大部门的导入和导出需求。环境准备1.Maven依赖本次工具类的封装主要依赖于阿里巴巴的JSON包,以及表格处理的POI包,所以我们需要导入这两个库的依赖包,另外,我们还需要文件上传的相关包,毕竟我们在浏览器页面,做Excel导入时,是上传的Excel文件。<!–文件上传–><dependency>

    2022年6月28日
    131

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号