中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中的淺拷貝與深拷貝

發布時間:2020-07-03 23:39:31 來源:網絡 閱讀:480 作者:BigData課堂 欄目:軟件技術

Java中的淺拷貝與深拷貝

1.淺拷貝含義:
對于基本類型來講都是值的引用,但是對于引用類型來講,拷貝的是同一個引用,也就是同一個首地址的對象,它所指的堆內存都是一樣的。
2.深拷貝含義:
對于基本類型來講都是值的引用,但是對于引用類型來講,會再創建一個新的對象,指向另一個首地址。

班級類拷貝方法為淺拷貝
public class Classes implements Cloneable{
/*

  • 學生
    */
    private Student student;

    /
    班級名稱
    */
    private String classesName;

    /班級編號
    /
    private String classesCode;

    public Classes(Student student, String classesName, String classesCode) {
    super();
    this.student = student;
    this.classesName = classesName;
    this.classesCode = classesCode;
    }

    public Student getStudent() {
    return student;
    }

    public void setStudent(Student student) {
    this.student = student;
    }

    public String getClassesName() {
    return classesName;
    }

    public void setClassesName(String classesName) {
    this.classesName = classesName;
    }

    public String getClassesCode() {
    return classesCode;
    }

    public void setClassesCode(String classesCode) {
    this.classesCode = classesCode;
    }

    public Object clone() throws CloneNotSupportedException {
    return super.clone();
    }
    }

/**

  • 學生類
  • @author win 10
  • /
    public class Student implements Cloneable{
    /

    • 姓名
      */
      private String name;

    /*

    • 年齡
      */
      private int age;

    public Student(String name, int age) {
    super();
    this.name = name;
    this.age = age;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public int getAge() {
    return age;
    }

    public void setAge(int age) {
    this.age = age;
    }

}

測試類:
public class TestClone {
public static void main(String[] args) {
Student stu = new Student("張三",16);
Classes cla = new Classes(stu,"初一(2)班","002");
System.out.println("原對象:"+cla);
System.out.println("原對象student屬性"+stu);
System.out.println("姓名:"+cla.getStudent().getName()+"年齡:"+cla.getStudent().getAge());
try {
Classes cla2 = (Classes)cla.clone();
//重新設置拷貝對象student的年齡屬性,用于觀察是否會影響到原對象的student年齡屬性
cla2.getStudent().setAge(18);
System.out.println("拷貝對象:"+cla2);
System.out.println("拷貝對象student屬性:"+cla2.getStudent());
System.out.println("拷貝對象姓名:"+cla2.getStudent().getName()+"年齡:"+cla2.getStudent().getAge());
System.out.println("原對象姓名:"+cla.getStudent().getName()+"年齡:"+cla.getStudent().getAge());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
測試結果:
Java中的淺拷貝與深拷貝
雖然Classes對象已經是深拷貝,但是Classes對象里的Student對象并沒有做到深拷貝。拷貝出來的Classes對象的Student屬性會跟隨著原Classes的Student的變化而變化同樣的原Classes的Student也會跟著拷貝后的Student變化后變化。

改版后的代碼:
package Clone;

/**

  • 班級類
  • @author win 10
  • /
    public class Classes implements Cloneable{
    /

    • 學生
      */
      private Student student;

    /
    班級名稱
    */
    private String classesName;

    /班級編號
    /
    private String classesCode;

    public Classes(Student student, String classesName, String classesCode) {
    super();
    this.student = student;
    this.classesName = classesName;
    this.classesCode = classesCode;
    }

    public Student getStudent() {
    return student;
    }

    public void setStudent(Student student) {
    this.student = student;
    }

    public String getClassesName() {
    return classesName;
    }

    public void setClassesName(String classesName) {
    this.classesName = classesName;
    }

    public String getClassesCode() {
    return classesCode;
    }

    public void setClassesCode(String classesCode) {
    this.classesCode = classesCode;
    }

    public Object clone() throws CloneNotSupportedException {
    Classes cla = (Classes)super.clone();
    cla.student = (Student)student.clone();
    return cla;
    }
    }
    將Stundent引用類型也做一個深拷貝

package Clone;

/**

  • 學生類
  • @author win 10
  • /
    public class Student implements Cloneable{
    /

    • 姓名
      */
      private String name;

    /年齡
    /
    private int age;

    public Student(String name, int age) {
    super();
    this.name = name;
    this.age = age;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public int getAge() {
    return age;
    }

    public void setAge(int age) {
    this.age = age;
    }
    public Object clone() throws CloneNotSupportedException {
    return super.clone();
    }
    }
    Student也加上拷貝方法
    測試結果:
    Java中的淺拷貝與深拷貝

更多技術分享,請關注微信公眾號 Big Data課堂

Java中的淺拷貝與深拷貝

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五家渠市| 湘潭市| 甘肃省| 安陆市| 云阳县| 苍溪县| 涟源市| 长岛县| 蛟河市| 绵竹市| 池州市| 延安市| 荆门市| 凤山市| 巢湖市| 宁晋县| 东乡县| 美姑县| 海原县| 万源市| 砚山县| 安康市| 瑞金市| 洛南县| 昌平区| 双峰县| 阜康市| 宁海县| 广德县| 读书| 弥勒县| 五家渠市| 吉首市| 扶沟县| 新乡市| 诏安县| 彰化市| 弥勒县| 苍南县| 禹城市| 西宁市|