Всегда ли это условие верно? - PullRequest
0 голосов
/ 03 сентября 2018

Я получаю сообщение о том, что мое состояние всегда верно, его не было до сих пор, и я ничего не изменил.

Может ли это быть правдой?

    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, это также может быть истинный размер == 2 (который также имеет то же предупреждение). Это ошибка или это условие "всегда верно"?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

size>2 всегда является подмножеством size>=2. IDE оценивает внутреннее условие if в соответствии с внешним. Таким образом, нормально иметь предупреждение.

0 голосов
/ 03 сентября 2018

if (size >= 2) будет оцениваться, только если внешнее условие if (size > 2) оценено как true.

Это означает, что он будет оцениваться только в том случае, если размер больше 2 . Но если размер больше 2, он также гарантированно будет больше или равен 2 , поэтому внутреннее состояние всегда будет true и, следовательно, бессмысленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...