LocalDate:等于与 isEqual
LocalDate: equals vs isEqual
LocalDate
in Java 有两个相似的方法 equals
和 isEqual
.
它们有什么区别?他们什么时候输出不同的结果?
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
LocalDate
in Java 有两个相似的方法 equals
和 isEqual
.
它们有什么区别?他们什么时候输出不同的结果?
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