Cloneable接口是一個標記接口,也就是沒有任何內容,定義以下:html
這裏分析一下這個接口的用法,clone方法是在Object種定義的,並且是protected型的,只有實現了這個接口,才能夠在該類的實例上調用clone方法,不然會拋出CloneNotSupportException。Object中默認的實現是一個淺拷貝,也就是表面拷貝,若是須要實現深層次拷貝的話,必須對類中可變域生成新的實例。java
更多淺拷貝理解:java對象深複製、淺複製(深拷貝、淺拷貝)的理解post
Object提供了一個對象拷貝的默認方法clone方法,可是該方法是有缺陷的,它提供了一種淺拷貝方式,也就是它並不會把對象全部屬性所有拷貝一份,而是有選擇性的拷貝,拷貝規則以下:url
一、基本類型spa
若是變量是基本類型,則拷貝其值,好比:int、float、long等。htm
二、String字符串對象
這個比較特殊,拷貝的是地址,是個引用,可是在修改的時候,它會從字符串池(String Pool)中從新生成新的字符串,原有的字符串對象保持不變,此處能夠認爲String是個基本類型。blog
三、對象接口
若是變量時一個實例對象,則拷貝地址引用,也就是說此時新拷貝出的對象與原有對象共享該實例變量,不受訪問權限的限制。這在Java中很瘋狂,由於它突破了訪問權限的定義,一個private修飾的變量,居然能夠被兩個實例對象訪問。字符串