2015-11-04 48 views
6

下面的程序上的IntelliJ的IntelliJ - 警告消息不会出现I> = 2,当我知道

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

警告我的条件 “条件 '我< = 2' 总是 '真'”。 如果我用i > 2代替条件,我得到“条件'我> 2'总是'假'”。与i == 2相同。

但是,如果我将其替换为i >= 2我没有任何警告。

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

我使用的是IntelliJ 14.1.5,使用的编译器是1.8.0_51版本的javac。

enter image description here

+5

好像在的IntelliJ不是Java问题执行情况的故障。我会建议报告给JetBrains。 –

+3

我不认为有什么深层原因。它只是一个错误,但这是一个很奇怪的错误。如果我做'int i = 5;如果(我<= 2)'我没有收到警告。 –

+0

也许https://youtrack.jetbrains.com/issue/IDEA-146950 – 2015-11-04 16:48:03

回答

3

像保罗一样博丁顿在注释中说的选项,这是实际上JetBrains忘了在他们的算法中实现的东西,那一直是fixed a few days ago

前:

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 && 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); 

通讯问题:https://youtrack.jetbrains.com/issue/IDEA-146950

1

这被带到了我的注意,大约一个星期前,所以它的有趣,我看到它在这里后不久了。我看着它,并且它早在Intellij 10就已经发生了。在整个更新过程中都有一些错误修复,但问题尚未明确解决。

以下是Jetbrains提到的错误链接。有多种情况。 IDEA-84489

如果它困扰着你,尝试通过Alt键抑制警告+ Enter键,同时将光标置于它,并选择说“打压......”