I have the following piece of code from effective java by Joshua Bloch (Item 9, chapter 3, page 49)
If a class is immutable and the cost of computing the hash code is
significant, you might consider caching the hash code in the object
rather than recalculating it each time it is requested. If you believe
that most objects of this type will be used as hash keys, then you
should calculate the hash code when the instance is created.
Otherwise, you might choose to lazily initialize it the first time
hashCode is invoked (Item 71). It is not clear that our PhoneNumber
class merits this treatment, but just to show you how it’s done:
// Lazily initialized, cached hashCode
private volatile int hashCode; // (See Item 71)
@Override public int hashCode() {
int result = hashCode;
if (result == 0) {
result = 17;
result = 31 * result + areaCode;
result = 31 * result + prefix;
result = 31 * result + lineNumber;
hashCode = result;
}
return result;
}
my question is how the caching (remembering the hashCode) works here. The very first time, hashCode()
method is called, there is no hashCode
to assign it to result. a brief explanation on how this caching works will be great.
Thanks
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…