IntelliJ - 当我知道i> = 2时,不会出现警告消息

use*_*315 6 java if-statement intellij-idea conditional-statements

关于IntelliJ的以下程序

public static void main(String[] args) {
    int i = 0;
    if (i <= 2) {
        System.out.println("ok");
    }
}
Run Code Online (Sandbox Code Playgroud)

警告我"条件'我<= 2'总是'真'".如果我用条件替换条件i > 2,我得到"条件'i> 2'总是'假'".与...相同i == 2.

但如果我用它替换它i >= 2我没有任何警告.

为什么在最后一种情况下IntelliJ不警告我这种情况总是错误的?

我正在使用IntelliJ 14.1.5,并且在1.8.0_51版本中使用的编译器是javac.

在此输入图像描述

Bas*_*sen 3

就像 Paul Boddington 在评论中所说,这实际上是 JetBrains 忘记在他们的算法中实现的东西,几天前已经修复了

前:

if (opSign == LT && comparedWith <= rangeMin) return alwaysFalse(instruction, runner, memState);
if (opSign == LT && comparedWith > rangeMax) return alwaysTrue(instruction, runner, memState);
if (opSign == LE && comparedWith >= rangeMax) return alwaysTrue(instruction, runner, memState);

if (opSign == GT && comparedWith >= rangeMax) return alwaysFalse(instruction, runner, memState);
if (opSign == GT && comparedWith < rangeMin) return alwaysTrue(instruction, runner, memState);
if (opSign == GE && comparedWith <= rangeMin) return alwaysTrue(instruction, runner, memState);
Run Code Online (Sandbox Code Playgroud)

后:

if (opSign == LT && comparedWith <= rangeMin) return alwaysFalse(instruction, runner, memState);
if (opSign == LT && comparedWith > rangeMax) return alwaysTrue(instruction, runner, memState);
if (opSign == LE && comparedWith >= rangeMax) return alwaysTrue(instruction, runner, memState);
if (opSign == LE && comparedWith < rangeMin) return alwaysFalse(instruction, runner, memState);

if (opSign == GT && comparedWith >= rangeMax) return alwaysFalse(instruction, runner, memState);
if (opSign == GT && comparedWith < rangeMin) return alwaysTrue(instruction, runner, memState);
if (opSign == GE && comparedWith <= rangeMin) return alwaysTrue(instruction, runner, memState);
if (opSign == GE && comparedWith > rangeMax) return alwaysFalse(instruction, runner, memState);
Run Code Online (Sandbox Code Playgroud)

对应问题:https ://youtrack.jetbrains.com/issue/IDEA-146950