LocalDate
在 Java 中有两个类似的方法equals
和isEqual
.
他们之间有什么区别?当他们输出不同的结果时?
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
该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;
}
有两个很好的答案。为了完整起见,我想明确表示 Most Needed Rabbit 的观察暗示你可以传递一些不是ChronoLocalDate
toequals()
但不是 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)
但是,传递一个字符串或不同的类型通常不是很有用。
可能更令人惊讶的是,这两种方法的处理方式也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 中的异常