【发布时间】:2021-05-21 10:28:29
【问题描述】:
我正在努力争取每月的第一个星期四
dates.forEach(date -> {
System.out.println("Date: " + date);
LocalDate dateT = date.with(firstInMonth(DayOfWeek.THURSDAY));
System.out.println("First Thursday: " + dateT);
if(date == dateT) {
System.out.println("Date: " + date + " is the first thursday");
}
System.out.println("");
});
dates 是 LocalDate 对象的哈希集,周一至周日为 7 天 他们的对象可能跨越两个月(5 月 31 日、6 月 1 日等)
打印的输出与预期一致,但从未触发 if。我在第一个星期二运行了准确的 sae 代码,运行良好。
成功获取到6月的第一个星期四是2021-06-03,但是if中的打印从未触发
Date: 2021-05-31 First Thursday: 2021-05-06 Date: 2021-06-06 First Thursday: 2021-06-03 Date: 2021-06-05 First Thursday: 2021-06-03 Date: 2021-06-04 First Thursday: 2021-06-03 Date: 2021-06-03 First Thursday: 2021-06-03 Date: 2021-06-02 First Thursday: 2021-06-03 Date: 2021-06-01 First Thursday: 2021-06-03
【问题讨论】:
-
来自the documentation of
LocalDate:这是一个基于值的类;在LocalDate的实例上使用身份敏感操作(包括引用相等 (==)、身份哈希码或同步)可能会产生不可预知的结果,应该避免。应该使用equals方法进行比较。
标签: java if-statement java-time dayofweek localdate