LocalDate: equals vs isEqual


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

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

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

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

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

public boolean isEqual(ChronoLocalDate other)

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

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

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((允许null;isEqual((不

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

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

相关内容

  • 没有找到相关文章

最新更新