Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套while循环赋值在Java中给出了意外的结果_Java_Loops - Fatal编程技术网

嵌套while循环赋值在Java中给出了意外的结果

嵌套while循环赋值在Java中给出了意外的结果,java,loops,Java,Loops,我在while循环中有一个嵌套的赋值,它给了我意想不到的结果。 下面的代码在将包数据写入文件的线程中运行。通过ConcurrentLinkedQueue从另一个线程接收包 只要生产者将包放入队列,此代码就不会进入写入部分 Packet packet = null; while (!done || (packet = queue.poll()) != null){ if (packet != null){ packet.write(bufferedOutputStream)

我在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){
    ...
|
短路。这意味着如果第一个操作数为真,则不计算第二个操作数

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

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


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

啊,没错。亲爱的,我看不见!啊,对。亲爱的,我看不见!这是一个怎样的重复问题?这是一个怎样的重复问题?