韩漫免费漫画在线观看方法,《好好疼爱里面》免费看,年轻漂亮的女士护士内衣,妈妈醉酒后把我当爸爸电视剧

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

关注

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

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

欧美片《肉欲进入》| 代练通| 小雪被老汉玩得嗷嗷叫| 女生把QQ放在一起的头像| 女生干多了腿中间会变宽吗| 器材室轮-J-(4)| 韩剧《酒醉热吻》| 外国网站| 群体轮换| 法国色情巜监狱宝贝3| 《请好好疼爱里面》免费观看| 《炸裂吧!巨棒》免费阅读漫画| 人野兽马狗猪大全| 爸爸的大DJ小说| 二人生猴子全程免费| 她开始慢慢迎合刘小刚是什么歌 | 杓怎么读| 瑶瑶被躁在卧室里被吸在线观看| 李丽珍的电影| 欧美大片PPT| 《厨房激战5》完整版在线观看 | 女朋友太骚了每次进去都觉得很热| 女人什么姿势下面最紧| HTTPS://WWW.API...| 国精产品偷偷偷拍XXXX| 成品PPT网站大片| 妈妈的好朋友ID| 打扑克牌男女| 妈妈がだけの心に漂う | 女生给男生吃小头头| 《喂奶人妻厨房HD》| 欧美电影免费观看电视剧大全| 久久久无码AV精品夜夜挺价格 | 鲁鲁影院免费观看电视剧电影 | 《完美邻居》电影免要观看| CHROME浏览器下载| 鲁鲁射击免费播放电视剧全部 | 怎么骑桌角到失禁| 温柔女教师在线观看电视剧大全| 兽父全集免费观看完整版| 爸爸VICIUSSS幼儿小女孩