我收到一条消息,说我的病情始终是对的,直到现在我还没有改变,我什么也没做。
这是真的吗?
int size = in.readableBytes();
if (size > 2){
byte sizeBytes = in.readByte();
int length = sizeBytes == 1 ? in.readUnsignedByte() : sizeBytes == 2 ? in.readUnsignedShort() : sizeBytes == 3 ? ((in.readUnsignedByte() & 0xFF) << 16) | ((in.readUnsignedByte() & 0xFF) << 8) | (in.readUnsignedByte() & 0xFF) : 0;
if (length != 0){
byte packetID = in.readByte();
if (size == length){
if (size >= 2){ // Condition is always true warning
System.out.println("Size >= 2");
out.add(new Packet(in, packetID));
}
}
}
}
我认为这与size > 2
不同,它也可以是真实的size == 2(也有相同的警告)。这是错误还是该条件实际上“总是正确”?
答案 0 :(得分:6)
if (size >= 2)
仅在外部条件if (size > 2)
评估为true
时评估。
这意味着仅当大小大于2 时才进行评估。但是,如果大小大于2,则可以保证它也大于或等于2 ,因此内部条件将始终为true
,因此毫无意义。
答案 1 :(得分:2)
size>2
始终是size>=2
的子集。 IDE根据外部的条件评估内部的if子句。因此,发出警告是正常的。