4 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
之所以選擇31值,是因?yàn)樗且粋€(gè)奇數(shù)素?cái)?shù)。如果是偶數(shù),乘法溢出,信息就會(huì)丟失,因?yàn)槌?等于移動(dòng)。使用質(zhì)數(shù)的優(yōu)點(diǎn)不太清楚,但它是傳統(tǒng)的。31的一個(gè)優(yōu)點(diǎn)是可以用移位和減法來代替乘法,以獲得更好的性能: 31 * i == (i << 5) - i
..現(xiàn)代VM自動(dòng)進(jìn)行這種優(yōu)化。
(從第3章第9項(xiàng):當(dāng)您重寫等于時(shí)始終重寫hashcode,第48頁)

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
RSB r1, r0, r0, ASL #5 ; r1 := - r0 + (r0<<5)
添加回答
舉報(bào)