文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java 对象的克隆(浅克隆和深克隆)

2023-05-31 10:05

关注

java 对象的克隆

一、对象的浅克隆

(1)需要克隆类需要重写Object类的clone方法,并且实现Cloneable接口(标识接口,无需实现任何方法)
(2)当需要克隆的对象中维护着另外一个引用对象,浅克隆不会克隆另外一个引用对下,而是直接复制维护的另外一个引用对象的地址。
(3)对象的浅克隆也不会调用到构造方法。

以下为对象的浅克隆的一个例子:

package com.clone;import java.io.Serializable;public class CloneDemo1 implements Cloneable,Serializable{  //该克隆类封装的信息  public int id;  public String name;  public Address address;    public CloneDemo1(){}    public CloneDemo1(int id, String name, Address address){    this.id=id;    this.name=name;    this.address = address;  }    @Override  public Object clone() throws CloneNotSupportedException{    return super.clone();  }    @Override  public String toString(){    return "id="+id+", name="+name+", address:"+address.getAddress();  }    public static void main(String[] args) throws CloneNotSupportedException{    CloneDemo1 c1 = new CloneDemo1(1,"c1",new Address("北京"));    //c2 复制了c1的地址,并没有复制整个c1对象    CloneDemo1 c2 = c1;    //c3 对象的浅克隆,复制了整个对象    CloneDemo1 c3 = (CloneDemo1)c1.clone();    //当对象c1改变其name或者id的时候,c2也会自动改变。    //因为c2只是复制了c1的地址,并非复制了c1的整个对象。    //相应的c3则不会随着c1改变而改变,意味着c3将c1整个对象克隆一份出来。    //当是,对象的浅克隆不会克隆被克隆对象当中的引用对象。    //因此c1改变其中的Address的引用对象时,c2,c3也会跟着改变。    c1.setName("cc");    c1.address.setAddress("上海");    System.out.println(c1+"\n"+c2+"\n"+c3);  }  public int getId() {    return id;  }  public void setId(int id) {    this.id = id;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }}class Address implements Serializable{  public String address;    public Address(){}    public Address(String address){    this.address = address;  }  //address的set和get方法  public String getAddress() {    return address;  }  public void setAddress(String address) {    this.address = address;  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯