Для изменяемых классов обычно не имеет особого смысла хранить hashCode, так как вам придется обновлять его каждый раз, когда изменяется объект (или, по крайней мере, обнулять его, чтобы вы могли пересчитать его в следующий раз hashCode()
называется).
Для неизменяемых классов имеет смысл сохранять хеш-код - после его вычисления он никогда не изменится (поскольку объект неизменен), и нет необходимости постоянно пересчитывать каждый раз, когда hashCode()
называется. В качестве дальнейшей оптимизации мы можем избежать вычисления этого значения до тех пор, пока оно не понадобится в первый раз (т.е. вызывается hashCode()
), т. Е. Использовать ленивую инициализацию.
Ничто не мешает вам делать то же самое с изменяемым объектом, просто это не очень хорошая идея.