Java-获得每月的第一个星期四
我在争取这个月的第一个星期四Java-获得每月的第一个星期四,java,if-statement,java-time,dayofweek,localdate,Java,If Statement,Java Time,Dayofweek,Localdate,我在争取这个月的第一个星期四 dates.forEach(date -> { System.out.println("Date: " + date); LocalDate dateT = date.with(firstInMonth(DayOfWeek.THURSDAY)); System.out.println("First Thursday: " + dateT); if(date
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对象的哈希集,mon-sun为7天
它们可能跨越两个月(5月31日、6月1日等)
打印输出与预期一致,但从未触发if。我有准确的sae代码运行的第一个星期二运行良好
它成功地发现6月的第一个星期四是2021-06-03,但if中的打印从未触发
=
测试两个变量是否是完全相同的对象。您应该使用equals
测试两个不同的对象之间的相等性:
if (date.equals(dateT)) {
您正在尝试比较两个对象,而不是它们所包含的值 对于LocalDates,您可以使用
dates.forEach(日期->{
系统输出打印项次(“日期:+日期);
LocalDate dateT=date.with(firstInMonth(DayOfWeek.周四));
System.out.println(“第一个星期四:+dateT”);
如果(日期等于(日期)){
System.out.println(“日期:“+Date+”是第一个星期四”);
}
System.out.println(“”);
});
在比较对象而不是两个值时,请使用equals()
而不是=
注意:在Java中,
=
操作符比较两个引用是否相同。而equals()
方法比较两个对象。这是否回答了您的问题?From:这是一个基于价值的类;在LocalDate
实例上使用标识敏感操作(包括引用相等(=
)、标识哈希代码或同步)可能会产生不可预测的结果,应避免使用。应使用equals
方法进行比较。
if (date.equals(dateT)) {
dates.forEach(date -> {
System.out.println("Date: " + date);
LocalDate dateT = date.with(firstInMonth(DayOfWeek.THURSDAY));
System.out.println("First Thursday: " + dateT);
if(date.isEqual(dateT)) {
System.out.println("Date: " + date + " is the first thursday");
}
System.out.println("");
});