java - ZonedDateTime hashCode() 与 isEqual() 一致吗?

标签 java datetime time java-8 java-time

我想知道 ZonedDateTime.hashCode() 是否执行保证与 ZonedDateTime.isEqual(...) 一致?如果不是,那么如何计算这样的哈希码?

编辑

请注意,这个问题是关于方法 isEqual ,不是关于equals 。这不是我的问题中的打印错误。

编辑#2

我问这个问题的原因是因为我有一个包含 ZonedDateTime 的类目的。该类的实现如下:

public class Foo {
    private ZonedDateTime dateTime;

    @Override
    public boolean equals(Object obj) {
        // Boilerplate stuff here...
        final Foo other = (Foo)obj;
        return (... && dateTime.isEqual(other.dateTime) && ...);
    }

    @Override
    public int hashCode() {
        // What do I need to put here so that my implementation of
        // hashCode is consistent with my implementation of equals?
        return Objects.hashCode(..., dateTime.?, ...);
    }
}

正如您在实现中看到的,我正在调用 isEqual我的 equals 实现中的方法,因为当存储的时间指向同一时刻时,我希望两个对象比较相等。我可以在hashCode的实现中添加什么,这样 Foo类满足 hashCode 的要求与 equals 一致?

最佳答案

isEqual() 方法 javadoc 说

This is equivalent to using dateTime1.toInstant().equals(dateTime2.toInstant());.

因此,如果您想计算与此方法一致的哈希码,则必须使用zdt.toInstant().hashCode()。那么您的 Foo.hashCode() 将与您的 Foo.equals() 一致。

关于java - ZonedDateTime hashCode() 与 isEqual() 一致吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36209029/

相关文章:

java - 在伪分布式模式下设置mapred.map.tasks时出错

Java线程进程间通信在 boolean 变量条件下工作但不在int中?

java - 无法在Java RMI中连接两个远程主机

java - 等效于 ObjectOutputStream,不仅保存其状态而且保存整个对象?

mysql - SQL 中日期时间的时间戳 (PHPmyAdmin)

validation - Aurelia 验证一个日期时间大于另一个

JavaScript 时间比较

java - java中算法的时间复杂度

php - PHP 在启动过程的什么时候设置 REQUEST_TIME 变量

c - 如何使用 clock_gettime