2015-11-04 47 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鍵,同時將光標置於它,並選擇說「打壓......」