我有以下来自 Joshua Bloch 的有效 java 的代码(第 9 项,第 3 章,第 49 页)
如果一个类是不可变的并且计算哈希码的成本很高,您可能会考虑在对象中缓存哈希码,而不是在每次请求时重新计算它。如果您认为大多数此类对象将用作哈希键,那么您应该在创建实例时计算哈希码。否则,您可能会选择在第一次调用 hashCode 时延迟初始化它(Item 71)。尚不清楚我们的 PhoneNumber 类是否值得这种处理,只是为了向您展示它是如何完成的:
    // 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;
    }
我的问题是缓存(记住 hashCode)如何在这里工作。第一次hashCode()调用方法,没有hashCode将其分配给结果。关于这种缓存如何工作的简要说明会很棒。谢谢