【问题标题】:LocalDate: equals vs isEqualLocalDate:等于与 isEqual
【发布时间】:2021-08-11 07:44:11
【问题描述】:

Java 中的LocalDate 有两个类似的方法equalsisEqual

它们之间有什么区别?他们什么时候输出不同的结果?

【问题讨论】:

  • 你读过documentation吗?它详细解释了差异。
  • @HenryTwist,你能解释一下吗?

标签: java equals java-time localdate jsr310


【解决方案1】:

equals() 方法将给出与isEqual() 相同的结果,但前提是传递的参数类型相同(在本例中为LocalDate)。

isEqual() 可以用ChronoLocalDate 调用(JapaneseDateThaiBuddhistDate...)

public boolean isEqual(ChronoLocalDate other)

如果参数不是LocalDateequals() 将返回 false:

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj instanceof LocalDate) {
        return compareTo0((LocalDate) obj) == 0;
    }
    return false;
}

【讨论】:

    【解决方案2】:

    LocalDate.equals 与大多数其他 equals 方法实现一样,如果您将 LocalDate 以外的其他内容传递给它,将始终返回 false,即使它们代表同一天:

    System.out.println(LocalDate.now().equals(HijrahDate.now())); // false
    

    ChronoLocalDate.isEqual比较两个日期是否是同一天,即本地时间线上的同一点:

    System.out.println(LocalDate.now().isEqual(HijrahDate.now())); // true
    

    【讨论】:

      【解决方案3】:

      equals() 可以处理任何引用类型

      有两个很好的答案。为了完整起见,我想明确指出,Most Needed Rabbit 的观察暗示您可以将不是ChronoLocalDate 的东西传递给equals(),但不能传递给isEqual()。例如:

          System.out.println(LocalDate.of(2021, Month.MAY, 26).equals("2021-05-26"));
      

      输出:

      这是 Java 中 equals 方法的标准行为。

      尝试使用isEqual() 同样会产生编译错误:

          System.out.println(LocalDate.of(2021, Month.MAY, 26).isEqual("2021-05-26"));
      

      LocalDate 类型中的方法 isEqual(ChronoLocalDate) 不是 适用于参数(字符串)

      不过,传递字符串或不同的类型通常没有用处。

      equals() 容忍空值; isEqual() 没有

      可能更令人惊讶的是,这两种方法对 null 的处理方式也不同。

          System.out.println(LocalDate.of(2021, Month.MAY, 26).equals(null));
      

          System.out.println(LocalDate.of(2021, Month.MAY, 26).isEqual(null));
      

      线程“主”java.lang.NullPointerException 中的异常

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-27
        • 1970-01-01
        • 2012-12-29
        • 2019-08-19
        相关资源
        最近更新 更多