實現物件轉殖的方法有兩種
這裡著重實現第一種,新建乙個bean,實現cloneable介面,重寫clone和tostring方法,**如下
public class mybean implements cloneable
@override
public mybean clone() catch (clonenotsupportedexception e)
}@override
public string tostring()
}
新建乙個測試類,並新建乙個物件1,宣告另外乙個物件2,首先不使用物件轉殖,直接讓2=1,看下效果
public static void main(string s)
執行效果:
com.example.demo.物件轉殖.mybean,name:張三,age:14@2b9af6f
com.example.demo.物件轉殖.mybean,name:張三,age:14@2b9af6f
可以看到兩者的hash值是一樣的,所以公用的還是同乙個記憶體位址,並沒有實現轉殖。
現在我們使用重寫的轉殖方法,2=1.clone(),來看一下效果
public static void main(string s)
執行效果:
com.example.demo.物件轉殖.mybean,name:張三,age:18@2b9af73
com.example.demo.物件轉殖.mybean,name:張三,age:18@2b9af73
是不是有點奇怪,為什麼使用了重寫的clone方法hash值依然是一樣的,我們通過set mybean2的age來再試一下
public static void main(string s)
執行效果:
com.example.demo.物件轉殖.mybean,name:張三,age:18@2b9af73
com.example.demo.物件轉殖.mybean,name:張三,age:14@2b9af6f
這個時候就出效果了,使用了重寫的clone方法,改變其中乙個物件的屬性時,另外乙個是保持不變的,並且兩者的hash值也不同了。
總結:通過重寫的clone方法,轉殖出來的物件依然會和源物件使用同乙個記憶體位址,但是當轉殖物件的屬性發生改變時,轉殖物件則不再和源物件使用同一記憶體位址,而是指向乙個新的記憶體位址。這樣在一定程度上,是可以節省記憶體空間的。
JS完美實現物件轉殖
我們知道,在js中,當object作為引數傳遞到函式中進行處理後,實際上是修改了傳入的物件本身 或者說是物件的引用 但很多時候我們並不希望函式去修改我們的這些物件引數,這就需要使用到物件的轉殖,我們應該對該物件做乙個轉殖,然後操作這個轉殖的物件,這樣就不會影響我們的原物件了。不過在js中並沒有物件轉...
php實現物件轉殖的方法
class staff function getid function setname name function getname 建立乙個新的staff物件並初始化 ee1 new staff ee1 setid 145 ee1 setnam simon 轉殖乙個新的物件 ee2 clone ee...
物件的轉殖
實體類teacher public class teacher implements cloneable public string getname public void setname string name override public teacher clone throws clonen...