Win a copy of Functional Reactive Programming this week in the Other Languages forum!

# Jason Bloch's hashCode formula

Gavin Bong
Ranch Hand
Posts: 56
In the book Effective Java, Jason Bloch proposed this hashCode formula (here shown for strings). What is the significance of the magic numbers 17 and 37 ? Is some number theory math wizardry involved ?

Ernest Friedman-Hill
author and iconoclast
Marshal
Posts: 24212
35
Hi,
It's Joshua Bloch!
Other than their being prime numbers, there's no special significance to them; they're just values that empirically work well.

Rocky Summers
Ranch Hand
Posts: 66
hi! just wondering what
this.value and this.value.hashCode() is...

Gavin Bong
Ranch Hand
Posts: 56
value and code are the two member variables in my class, from which this code extract was taken from.

Mac Lai
Greenhorn
Posts: 3
Hi,
I try to use the formula below to implement the hashCode() of my class, say ClassA.
There are 6 String fields to be compared in the equals() and hence my hashCode() will include these 6 fields.
On using this formula, the calculated hash code is very large, sometimes it is negative, say -1342574843. I guess it is because the value is bigger than a int can contain. My question is: is there any harm about this? How come there is a negative sign? Thx.
public int hashCode(){
int result = 17;
result = 37*result + ((this.value != null) ? this.value.hashCode() : 0);
result = 37*result + ((this.code != null) ? this.code.hashCode() : 0);
return result;
}

fred rosenberger
lowercase baba
Bartender
Posts: 12196
35
as i understand it, you are basically creating a bit pattern as your hash key. for some strings, the top bit gets set to 1. this makes it negative. it shouldn't hurt anything.
i think...