Java IntelliJ-对于条件i>;=当我被认识的时候

Java IntelliJ-对于条件i>;=当我被认识的时候,java,if-statement,intellij-idea,conditional-statements,Java,If Statement,Intellij Idea,Conditional Statements,以下是IntelliJ上的程序 public static void main(String[] args) { int i = 0; if (i <= 2) { System.out.println("ok"); } } publicstaticvoidmain(字符串[]args){ int i=0; 如果(I2,我得到“条件'i>2'总是'false'”。与i==2相同 但是如果我用I>=2替换它,我就没有任何警告 为什么在最后一个案例中In

以下是IntelliJ上的程序

public static void main(String[] args) {
    int i = 0;
    if (i <= 2) {
        System.out.println("ok");
    }
}
publicstaticvoidmain(字符串[]args){
int i=0;
如果(I2
,我得到“条件'i>2'总是'false'”。与
i==2
相同

但是如果我用
I>=2
替换它,我就没有任何警告

为什么在最后一个案例中IntelliJ没有警告我这个条件总是错误的

我使用的是Intellij14.1.5,使用的编译器是javac的1.8.0_51版本


大约一周前我注意到了这一点,所以很有趣,不久之后我也在这里看到了它。我查看了它,很明显它早在Intellij 10就发生了。在所有更新过程中都有一些错误修复,但问题还没有得到明确的修复

这里有一个Jetbrains指向该bug的链接。有多种情况


如果这让您感到困扰,请尝试在光标位于警告上方时通过Alt+Enter来抑制警告,并选择“抑制…”选项。

就像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);
if(opSign==LT&&comparedwithrangemax)始终返回指令(指令、运行程序、memState);
if(opSign==LE&&comparedWith>=rangeMax)返回alwaysTrue(指令、运行程序、memState);
if(opSign==GT&&comparedWith>=rangeMax)返回alwaysFalse(指令、运行程序、memState);
如果(opSign==GT&&comparedWith=rangeMax)返回alwaysFalse(指令、运行程序、memState);
如果(opSign==GT&&comparedWith

相应的问题:

似乎是Intellij实现中的一个错误,而不是Java问题。我建议将此报告给JetBrains。我不认为有任何深层次的原因。这一定是一个错误,但这是一个相当奇怪的错误。如果我这样做
int I=5;如果(我可能会投票结束这个问题,因为它更多的是一个bug报告,而不是一个问题
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);