国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > java基础 > java浅拷贝的使用

java浅拷贝的使用

头像

小妮浅浅

2021-01-19 16:47:202524浏览 · 0收藏 · 0评论

除了可以直接复制java中的对象,我们还可以创建新对象进行拷贝,如果只是简单的复制属性,那么这种就是浅拷贝了。需要注意的是,因为拷贝的类型不同,所以在赋值上分为值赋值和引用赋值两种。下面我们就java浅拷贝的概念、原理进行学习,然后在代码中使用浅拷贝。

1.概念

浅拷贝会创建一个新对象,新对象和原对象本身没有任何关系,新对象和原对象不等,但是新对象的属性和老对象相同。具体可以看如下区别:

(1)如果属性是基本类型(int,double,long,boolean等),拷贝的就是基本类型的值;

(2)如果属性是引用类型,拷贝的就是内存地址(即复制引用但不复制引用的对象) ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。

2.原理

如果原型对象的成员变量是值类型,将复制一份给克隆对象,也就是说在堆中拥有独立的空间;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。换句话说,在浅克隆中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。

3.使用实例

需要拷贝的类上实现Cloneable接口并重写其clone()方法

class Father{
    String name;
    public Father(String name) {
        this.name=name;
    }
    @Override
    public String toString() {
        return "Father{" +
                "name='" + name + '\'' +
                '}';
    }
}
class Son implements Cloneable {
    int age;
    String name;
    Father father;
    public Son(String name,int age) {
        this.age=age;
        this.name = name;
    }
    public Son(String name,int age, Father father) {
        this.age=age;
        this.name = name;
        this.father = father;
    }
    @Override
    public String toString() {
        return "Son{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", father=" + father +
                '}';
    }
    @Override
    protected Son clone() throws CloneNotSupportedException {
        return (Son) super.clone();
    }
}
public class test {
    public static void main(String[] args) throws CloneNotSupportedException {
        Father f=new Father("bigFather");
        Son s1 = new Son("son1",13);
        s1.father=f;
        Son s2 = s1.clone();
        
        System.out.println(s1);
        System.out.println(s2);
        System.out.println("s1==s2:"+(s1 == s2));//不相等
        System.out.println("s1.name==s2.name:"+(s1.name == s2.name));//相等
        System.out.println();
 
        //但是他们的Father father 和String name的引用一样
        s1.age=12;
        s1.father.name="smallFather";//s1.father引用未变
        s1.name="son222";//类似 s1.name=new String("son222") 引用发生变化
        System.out.println("s1.Father==s2.Father:"+(s1.father == s2.father));//相等
        System.out.println("s1.name==s2.name:"+(s1.name == s2.name));//不相等
        System.out.println(s1);
        System.out.println(s2);
    }
}

以上就是java浅拷贝的使用,对于这种简单的复制方法,大家只要考虑拷贝时的数据类型就可以了。当然除了浅拷贝外,对应就出现了深拷贝,大家可以持续关注这方面的内容。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

134VCC影院免费观看| 小视频| 女子排尿视频大全| 老板不让穿内裤随时做| 三女片免费观看电视剧杨贵妃传| 法国《监狱伦理3》| 高血压的症状表现有哪些| 九九在线观看免费播放大全电视剧| 人狗大战5高清正版免费观看| 免费观看B站刺激战场2023| 大雷QQ弹弹跳舞| 当着老公的面被维修工欺负| 《老公请部长家里吃饭》日剧| 小洞流口水了 是不是饿了| 姨母的绣感中字3| 春夜电视剧全集免费观看韩剧| 被灌满精子的女人会得白血病吗| 女性左腿又开腿肚子视频大全| 真人做爰45分钟| 懵懂少女的挨日常TXT百度云资.. 爸爸缓慢有力送女儿的文案 | 丫头把腿开大让我添添| 国精产品一品二品国精HTC| 精品免费国产一区二区三区四区 | 《性旺盛的女人》HD| 年轻的嫂子2| 小妹妹爱大棒棒免费观看电视剧动.. | 《炸裂吧!巨棒》免费阅读漫画| 免费网站在线观看人数在哪省| 骨科1v1溢奶吸不完怎么办| 我的老师中字ID| 免费观看B站刺激战场2023| 一妻二夫| 班主任解开内裤让我桶她| 公厕被偷窃视频大全| 久久久久久精品免费观看黑人动漫| 《尼姑庵春梦》| 肉丸子影院免费观看电视剧 | 少女初恋吃小头头视频免费| 《请好好疼爱里面》免费观看 | 《高潮3》HD未删减减| 初中小姐姐脚丫踩在男生困困