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("");
    });