嵌套while循环赋值在Java中给出了意外的结果
我在while循环中有一个嵌套的赋值,它给了我意想不到的结果。 下面的代码在将包数据写入文件的线程中运行。通过ConcurrentLinkedQueue从另一个线程接收包 只要生产者将包放入队列,此代码就不会进入写入部分嵌套while循环赋值在Java中给出了意外的结果,java,loops,Java,Loops,我在while循环中有一个嵌套的赋值,它给了我意想不到的结果。 下面的代码在将包数据写入文件的线程中运行。通过ConcurrentLinkedQueue从另一个线程接收包 只要生产者将包放入队列,此代码就不会进入写入部分 Packet packet = null; while (!done || (packet = queue.poll()) != null){ if (packet != null){ packet.write(bufferedOutputStream)
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将不会被计算,因此不会重新分配数据包。啊,没错。亲爱的,我看不见!啊,对。亲爱的,我看不见!这是一个怎样的重复问题?这是一个怎样的重复问题?