LocalDate
有两个类似的方法equals
和isEqual
。
它们之间有什么区别?他们什么时候输出不同的结果?
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
(JapaneseDate
、ThaiBuddhistDate
…(调用
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