Shallow Copy(淺拷貝):創(chuàng)建一個(gè)新的與原類相同的類,在拷貝過程中,類中的基本類型得到正真的復(fù)制,而類中的對象只是實(shí)現(xiàn)引用的拷貝。當(dāng)我們在新的類中修改了其中的某個(gè)對象,這個(gè)對象在原始的類中也會(huì)得到反映。原因是我們修改的對象所指向的內(nèi)存地址是相同的。
從圖中可以看到,復(fù)制后的mainObj2中基本類型field2單獨(dú)獲得了一塊內(nèi)存區(qū),而對象級(jí)別的ObjStr并沒有正真的復(fù)制,內(nèi)存指針指向的還是同一塊區(qū)域。比如我們熟悉的HashMap,HashSet,ArrayList,LinkedList的clone都屬于淺拷貝行為。
Deep Copy(深拷貝):深度拷貝不但實(shí)現(xiàn)了基本類型的復(fù)制,同時(shí)也實(shí)現(xiàn)了對象的復(fù)制,簡單說就是從新用new操作符從新創(chuàng)建了一個(gè)一模一樣的類。