java 中的clone 在陣列中

2021-07-07 04:57:20 字數 891 閱讀 3771

今天在程式設計中遇到發現乙個問題,那就是二維陣列的clone,只有第一層clone了,裡層的還是指向之前的位址      

string a = ;

string aa = a.clone();

aa[0] = "22";

system.out.println(a[0]); //列印 1

string e = ,};

string ee = e.clone();

ee[0][0] = "22";

system.out.println(e[0][0]); //列印22

於是 就想到,clone() 函式 是不是對帶引用的成員變數(非string的物件)都沒有clone.

寫了如下**測試   

b b = new b("bp");

a a = new a(b, "ap");

a aa = a.clone();

aa.setparam("aap");

aa.getb().setparam("bbp");

system.out.println(a.getparam());

system.out.println(a.getb().getparam());

//列印結果:ap bbp

很明顯可以看到 aa的成員變數b 和 a的成員變數b 還是乙個引用。

結論:呼叫clone方法時,先

分配記憶體,分配的記憶體和源物件(即呼叫clone方法的物件)相同,然後再使用原物件中對應的各個域,填充新物件的域

Java中的clone和深度clone

複製物件 or 複製引用 person p new person 23,zhang person p1 p system.out.println p system.out.println p1 當person p1 p 執行之後,是建立了乙個新的物件嗎?首先看列印結果 person p new pe...

Java中的clone方法

1.功能 由方法名 轉殖 可知是複製乙個物件,方法呼叫後會建立並返回此物件的乙個副本。2.為什麼不用 以賦值的方式建立物件副本?student stu1 new student zhaoliu 18,1996 11 20 student stu2 stu1 stu2.setname lisi sys...

java中的clone 方法詳解

test public void testassign test public void testshallowcopy throws exception如果是基本資料型別的成員變數,我們轉殖之後彼此的屬性是可以相互不影響的,接著看 如果增加乙個自定義的類物件時 data public class ...