美文网首页
java浅拷贝和深拷贝

java浅拷贝和深拷贝

作者: 地表最强程序员小白 | 来源:发表于2017-11-11 21:12 被阅读66次

    代码

    public class nb{
        public static void main(String[] args){
            Resume zs=new Resume("zs","man",25);
            zs.setEexxpp("精通java");
            zs.display();
    
            Resume ls=(Resume)zs.clone();
            ls.setEexxpp("精通c++");
            zs.display();
            ls.display();
    
            ls.setEexxpp("啥都不精通");
            zs.display();
            ls.display();
        }
    }
    class Resume implements Cloneable{
        private String name;
        private String sex;
        private int age;
        //private String exp;
        private experience eexxpp;
        public Resume(String name,String sex,int age){
            this.name=name;
            this.sex=sex;
            this.age=age;
            this.eexxpp=new experience();
        }
        public void setAge(int age){
            this.age=age;
        }
        public int getAge(){
            return age;
        }
        /*public void setExp(String exp){
            this.exp=exp;
        }
        public String getExp(){
            return exp;
        }*/
        public void setEexxpp(String exp){
            //eexxpp.setExp(exp);                        深拷贝与浅拷贝的代码区别在这里
            eexxpp=new experience();
            eexxpp.setExp(exp);
        }
        public experience getEexxpp(){
            return eexxpp;
        }
        public void display(){
            System.out.println("姓名:"+name+" "+"性别:"+sex+" "+"年龄:"+age);
            System.out.println("工作经历:"+eexxpp.xp());
        }
        public Object clone(){
            try{
                return (Resume)super.clone();
            }catch(Exception e){
                e.printStackTrace();
                return null;
            }
        }
    }
    class experience{
        private String exp;
        public void setExp(String exp){
            this.exp=exp;
        }
        public String xp(){
            return exp;
        }
    }
    
    

    1.直接赋值:地址的赋值,即两个变量引用同一个对象,同步改变。
    2.浅拷贝:克隆后基本类型可以独立修改,但引用类型是共用的,即引用同一个对象。
    3.深拷贝:克隆后所有类型变量都是独立的。(在写set引用类型方法时引用一个新的对象即可)

    相关文章

      网友评论

          本文标题:java浅拷贝和深拷贝

          本文链接:https://www.haomeiwen.com/subject/sgegmxtx.html