gpt4 book ai didi

java - 嵌套 while 循环赋值在 Java 中给出了意想不到的结果

转载 作者:行者123 更新时间:2023-12-01 07:45:37 24 4
gpt4 key购买 nike

我在 while 循环内有一个嵌套赋值,这给了我意想不到的结果。下面的代码在将包数据写入文件的线程中运行。通过 ConcurrentLinkedQueue 从另一个线程接收包。

只要生产者将包放入队列中,此代码就永远不会进入写入部分。

Packet packet = null;
while (!done || (packet = queue.poll()) != null){
if (packet != null){
packet.write(bufferedOutputStream);
}
else{
Thread.sleep(100);
}
}

但是,一旦队列中有数据包,此代码就会进入写入部分。这对我来说是预期的行为。

Packet packet = null;
while (!done || packet != null){
packet = queue.poll();
if (packet != null){
packet.write(bufferedOutputStream);
}
else{
Thread.sleep(100);
}
}

我是不是错过了什么?为什么这些代码片段会产生不同的结果?

最佳答案

while (!done || (packet = queue.poll()) != null){
...

|| 短路。这意味着如果第一个操作数为 true,则不会计算第二个操作数。

对于此代码,这意味着如果 done 为 false,则 (packet = queue.poll()) != null 将不会被计算,因此 数据包不会被重新分配。

关于java - 嵌套 while 循环赋值在 Java 中给出了意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53186932/

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