一个关于理解浅拷贝与深拷贝的小程序

来源:互联网 发布:mac 图片 整理 编辑:程序博客网 时间:2024/06/11 12:50

浅拷贝基本数据类型值传递,引用类型是引用传递。

深拷贝则生成新的实例对象。

这里的深拷贝是使用了copy constructor方式。
public class Person {
String name;
   private String sex;
   private int age;
   
   public Person(String name,String sex,int age){
       this.name = name;
       this.sex = sex;
       this.age = age;
   }
   
   public Person(Person p){                   //拷贝构造方法,复制对象
       this.name = p.name;
       this.sex = p.sex;
       this.age = p.age;
   }
   public void setAge(int m){
    this.age = m;
   }
   public String toString(){
    return name +" "+ sex+" "+ age;
   }

}

public class Asian {
private String skin;
   Person person;
   
   public Asian(String skin,Person person){
       this.skin = skin;
       this.person = person;                    //引用赋值
   }


   public Asian(Asian asian){                 //拷贝构造方法,复制对象
       this(asian.skin,asian.person);           
   }
   public String toString(){
    return skin+" "+ person;
   
   }
   public static void main(String[] args){
    Person p1 = new Person("shaojianhua","mam",23);


    Person p2 = new Person(p1);
    p2.setAge(24);
    StdOut.println(p1);
    StdOut.println(p2);
    Asian a1 = new Asian("yellow",new Person("shaojianhua","mam",23));
    Asian a2 = new Asian(a1);
    a2.person = new  Person(a1.person);
    a2.person.setAge(24);
    /*Asian a2 = new Asian(a1);
    a2.person.setAge(24);*///a2、a1相同引用
    StdOut.println(a1);
    StdOut.println(a2);
   }
}

0 0