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.
就像 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