Java 为什么使用HashCodeBuilder为两个相等的对象获取不同的hashcode值?

Java 为什么使用HashCodeBuilder为两个相等的对象获取不同的hashcode值?,java,groovy,Java,Groovy,我做错了什么 @Override public int hashCode() { HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(); hashCodeBuilder.append(this.getId()).append(this.getDocFamilyUuid()) .append(

我做错了什么

        @Override
        public int hashCode()
        {
            HashCodeBuilder hashCodeBuilder = new HashCodeBuilder();
            hashCodeBuilder.append(this.getId()).append(this.getDocFamilyUuid())
                           .append(this.getCorrelationId());

            return hashCodeBuilder.hashCode();
        }
这就是我在groovy中创建对象的方式。字段被设置为静态常量

DocInfo docInfo =  new DocInfo(id:DOC_ID, correlationId: CORRELATION_ID, docFamilyUuid: DOC_FAMILY_UUID)
我试图断言

assert docInfo.hashCode() ==
           new DocInfo([id:DOC_ID,
                   correlationId: CORRELATION_ID,
                   docFamilyUuid:DOC_FAMILY_UUID]).hashCode()

我怀疑问题在于您调用的是
hashCode()
,而不是
toHashCode()
,假设您正在使用。换句话说,您得到的是构建器本身的哈希代码,而不是它正在构建的哈希代码:)

奇怪的是,在我链接到的JavaDoc版本中,它们被记录为返回相同的内容。所以我想知道你是否有一个旧版本,或者你可能正在使用一个完全不同的
HashCodeBuilder
版本


编辑:是的,
HashCodeBuilder.hashCode()
在2.5+版本中被重写,返回
toHashCode()
,但OP使用的是2.3版本,它不是那样工作的。

请提供有关您使用的HashCodeBuilder的更多信息-哪个库,哪个版本。这绝对是至关重要的信息。萨特尔,但重要的区别…:)@埃里卡。布兰德·斯塔德莫恩:也许吧。这取决于我是否正确,这取决于知道OP使用的确切HashCodeBuilder@但你猜得很好,不是吗?事实证明你是对的。@Phoenix:好的-看起来
hashCode
在2.5版中被重写,返回的值与
toHashCode
相同。您是否考虑过升级到不到5年的版本?:)