effective java學習筆記 4

2021-08-25 07:43:30 字數 956 閱讀 9027

8.3 方法實現的小建議

1. 把某個非0常數,比如17.儲存在乙個較results的變數中

2. 對於物件的每乙個域做一下操作 計算雜湊碼 c

2.1 boolean ---> c = f?0:1

2.2 byte char short int -- > (int)f;

2.3 long 型別 --> (int)(f^f >>> 32);

2.4 float 型別 -- > float.floattointbits()轉化為int

2.5 double 型別 -- > double.doubletolongbits() 轉化為int

2.6 物件的引用,那麼直接呼叫物件的hashcode()方法,具體在物件中自己實現。如果物件為null 那麼就設定為0

2.7 陣列,把陣列中的每乙個值作為單獨的域來處理。遞迴的引用上面的規則。

3. 按照下面的公式來套用2中計算得到的 c

result = result*37 +c ; //選擇37是因為37是乙個素數

下列就是按照上面的規則進行的計算

@override

public int hashcode()

4.若是計算的hashcode非常複製,計算代價太大,那麼可以將它放到系統快取中。

private volatile static int hashcode = 0; //這樣是作為乙個快取,並做lazy-initialized

@override

public int hashcode()

return hashcode;

}第九條:總是要改寫tostring()

建議一定要改寫該方法。

最好是指定一種格式來來覆蓋該方法,可以的話提供乙個公開靜態的方法來解析tostring後的方法。

第十條:謹慎的改寫clone()方法

首先需要實現cloneanle介面,標示該類是允許clone的

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...