LocalDate:等于与 isEqual

LocalDate: equals vs isEqual

LocalDate in Java 有两个相似的方法 equalsisEqual.

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

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

isEqual() 可以用 ChronoLocalDate (JapaneseDate, ThaiBuddhistDate...)

调用
public boolean isEqual(ChronoLocalDate other)

equals() 将 return false 如果参数不是 LocalDate:

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

LocalDate.equals,像大多数其他 equals 方法实现一样,如果你传递给它的不是 LocalDate,它总是 return false,即使它们表示相同天:

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

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

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

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

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

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

输出:

false

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

尝试使用 isEqual() 同样给出编译错误:

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

The method isEqual(ChronoLocalDate) in the type LocalDate is not applicable for the arguments (String)

不过,传递字符串或其他类型通常用处不大。

equals() 容忍 null; isEqual() 不

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

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

false

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

Exception in thread "main" java.lang.NullPointerException