我创建了两个zoneddatetime对象,我认为它们应该是相同的:
public static void main(String[] args) { ZoneId zid = ZoneId.of("America/New_York"); ZoneOffset offset = ZoneOffset.from(LocalDateTime.Now().atZone(zid)); zoneddatetime zdt0 = zoneddatetime.of(2014,8,24,21,10,1,777000002,offset); zoneddatetime zdt1 = zoneddatetime.of(2014,zid); boolean equals = Objects.equals(zdt0,zdt1); System.out.println("equals: " + equals); }
在调试器中,我看到第一种情况下zoneddatetime区域的成员类是java.time.ZoneOffset,第二种情况是java.time.ZoneRegion,这使得zoneddatetime对象不相等.这令人困惑……
有任何想法吗?
解决方法
您正在检查对象相等性,其值为false,因为这些对象不相等.一个绑定到ZoneId,另一个绑定到ZoneOffset.如果要检查它们是否代表同一时间,则可以使用非常直观命名的方法isEqual.
例如.:
ZoneId zid = ZoneId.of("America/New_York"); ZoneOffset offset = ZoneOffset.from(LocalDateTime.Now().atZone(zid)); zoneddatetime zdt0 = zoneddatetime.of(2014,offset); zoneddatetime zdt1 = zoneddatetime.of(2014,zid); System.out.println("isEqual:" + zdt0.isEqual(zdt1)); System.out.println("equals: " + zdt0.equals(zdt1));
打印:
isEqual:true equals: false
顺便说一下,请注意,您不需要为已知的两个对象使用Objects.equals(a,b)非空.您可以直接调用a.equals(b).
原文地址:https://www.jb51.cc/java/120751.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。