1.覆蓋equals時請遵守通用約定
自反性:對於任何非null的引用值x,x.equals(x)必須返回true
對稱性:對於任何非null的引用值x和y,當且僅當x.equals(y)返回true時,y.equals(x)返回true
傳遞性:對於任何非null的引用值x、y、z,如果x.equals(y)返回true,並且y.equals(z)返回true,那麼x.equals(z)一定返回true
一致性:對於任何非null的引用值x和y,只要equals在操作中引數沒有改變,那麼多次呼叫返回的結果必須一致。
2.覆蓋equals時總要覆蓋hashcode
如果兩個物件根據equals返回的結果為true,那麼他們通過hashcode返回的雜湊碼也必須相等。
3.始終要覆蓋tostring
預設的tostring放回的是類的名稱加上「@」符號,以及該物件的雜湊值的十六進製制表示,不易於閱讀。
4.謹慎地覆蓋clone
5.考慮實現comparable介面
Effective Java 學習筆記 6
及時消除不使用的物件的引用,理論上,帶有記憶體管理的語言是不存在記憶體洩漏的,但是如果對物件的操作不當,也是可能會造成記憶體洩漏.如有乙個stack,其pop函式如下.public object pop if element.length 0 return null return element s...
Effective Java 學習筆記(5)
盡量復用物件,而不是建立新的物件,特別是當乙個物件是immutable 不可改變 的時候。如string物件,string s new string string 千萬不要這樣做,因為這裡實際上建立了兩個物件。要避免出現這樣的情況,1是可以用靜態工廠函式,來解決,如類庫中的boolean.value...
Effective Java 學習筆記 6
及時消除不使用的物件的引用,理論上,帶有記憶體管理的語言是不存在記憶體洩漏的,但是如果對物件的操作不當,也是可能會造成記憶體洩漏.如有乙個stack,其pop函式如下.public object pop if element.length 0 return null return element s...