gpt4 book ai didi

Java boolean 值和 null 的奇怪性

转载 作者:行者123 更新时间:2023-11-29 03:08:22 25 4
gpt4 key购买 nike

谁能帮我理解为什么我的代码会生成以下输出?

请注意,这里的 f 是为了调试目的,f[0]=(lastLine!=null) 只是等同于 lastLine!=null 测试,所以它不是错误。

boolean f[] = new boolean[6];
if (f[0]=(lastLine!=null) // есть следующая строка
|| (f[1]=isEdgeTime) // конец сессии
|| (f[2]=td.getHour() <10) // или уже утро, после полуночи все свечки хороши
|| (f[3]=(td.getHour() == 23 && td.getMinute() >=50))
|| (f[4]=currServerHour > lineHour) // или час сменился
|| (f[5]=currServerMinutesPeriod > linesMinutesPeriod)
){
answer.append(classCode).append(".")
.append(TickerUtils.getRoot(ticker))
.append(";").append(minutes).append(";")
.append(line)
.append("\n");
System.out.println(Arrays.toString(f));
if (f[0])
System.out.printf("\"%s\" : %d, currServerMinute=%d; %d > %d\n", lastLine, (lastLine!=null? 1: 0), currServerMinute, currServerMinutesPeriod, linesMinutesPeriod);
line = lastLine;
}

输出:

[true, false, false, false, false, true]
"null" : 0, currServerMinute=50; 10 > 9

我无法理解的是为什么“lastLine”不为空,因为 f[0] 为真,同时 lastLine != null 给了我false,所以它是null,其实,这怎么可能?

最佳答案

如果看起来您正在将以下内容分配给 f[0]:

(lastLine!=null) // есть следующая строка
|| (f[1]=isEdgeTime) // конец сессии
|| (f[2]=td.getHour() <10) // или уже утро, после полуночи все свечки хороши
|| (f[3]=(td.getHour() == 23 && td.getMinute() >=50))
|| (f[4]=currServerHour > lineHour) // или час сменился
|| (f[5]=currServerMinutesPeriod > linesMinutesPeriod)

因此,即使 lastLine 为 null,f[0] 也可以为真。

尝试将您的条件更改为:

if ((f[0]=(lastLine!=null)) // есть следующая строка
|| (f[1]=isEdgeTime) // конец сессии
|| (f[2]=td.getHour() <10) // или уже утро, после полуночи все свечки хороши
|| (f[3]=(td.getHour() == 23 && td.getMinute() >=50))
|| (f[4]=currServerHour > lineHour) // или час сменился
|| (f[5]=currServerMinutesPeriod > linesMinutesPeriod)
)

如果您希望 f[0] 包含 (lastLine!=null) 的值。

这将处理 f[0] 的值。但是,如果 f[i] 对任何 i 都为真,则 f[i+1] 不会因为短路评估而被评估|| 条件,因此您在 f 数组中始终最多只有一个 true 值。我不确定这是否是您想要的。

关于Java boolean 值和 null 的奇怪性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30839950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com