国产成人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浅拷贝的使用,对于这种简单的复制方法,大家只要考虑拷贝时的数据类型就可以了。当然除了浅拷贝外,对应就出现了深拷贝,大家可以持续关注这方面的内容。

关注

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

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

法国巜做爰的禁忌1| 三亚私人高清影院的更新情况| 无套内谢A片毛片免费| 真实双人插画的视频| 憋尿白丝小肚子凸起高冷知乎| 18岁的少女与狗高清电视剧| 鲁鲁射击免费播放电视剧全部| D124| 女同学上课用嘴帮我口出来| 老师含紧一点H边做边走| 《黏糊糊的你》动漫免费观看| 我学生的老师中字ID| 老师穿黑色双开真丝旗袍如何穿芭.. | 敌伦交换小敏小静小雅第1集| 三更2饺子截取一小段| 特级牲交大片20分钟-春梦AV| 《一滴都不许漏》何泽城林荫| 一夹一摇怎么练出来| 《女教师的味道3》在线观看| 一天日八个B| INSTAGRAM网页版| 天美麻花星空影视免费观看电视剧| 一路向西高清下载| 妈妈がだけの爱いたい歌词 | 小柔与王叔的第一次相遇是第几集| 被两个老头又日又添| 97在线观看免费高清电视剧狂飙| 老公拿狗给我配| 丁字裤阴唇肥大的地方叫什么 | 离婚女人的周末| 苹果13参数| 三上悠亚在线观看| 《慈母夜吟》完整版| 暴躁老阿姨CSGO最强武器搭配| 《疯狂72小时》韩剧| 爱爱内含光| 美女和帅哥一起努力生产豆浆的视. | 《黏糊糊的你》动漫免费观看| 小柔与王叔的第一次相遇是第几集| 医生一直揉白带湿漉漉的正常吗 | 吻戏