4

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

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

4

3 回答 3

8

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

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

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

System.out.println(LocalDate.now().isEqual(HijrahDate.now())); // true
于 2021-05-22T09:10:29.117 回答
2

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

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

public boolean isEqual(ChronoLocalDate other)

equals()如果参数不是 a ,将返回 false LocalDate

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj instanceof LocalDate) {
        return compareTo0((LocalDate) obj) == 0;
    }
    return false;
}
于 2021-05-22T09:07:49.193 回答
1

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

有两个很好的答案。为了完整起见,我想明确表示 Most Needed Rabbit 的观察暗示你可以传递一些不是ChronoLocalDatetoequals()但不是 to的东西isEqual()。例如:

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

输出:

错误的

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

尝试isEqual()类似地使用会产生编译错误:

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

LocalDate 类型中的方法 isEqual(ChronoLocalDate) 不适用于参数 (String)

但是,传递一个字符串或不同的类型通常不是很有用。

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 中的异常

于 2021-05-26T04:59:09.883 回答