2015-11-04 3 views
6

Das folgende Programm auf IntelliJ bekanntIntelliJ - Nachricht Warnung nicht für den Zustand erscheinen i> = 2, wenn i

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

warnt mich "Bedingung 'i < = 2' ist immer 'true'". Wenn ich die Bedingung mit i > 2 ersetze, bekomme ich "Bedingung 'i> 2' ist immer 'falsch'". Gleiches mit i == 2.

Aber wenn ich es durch i >= 2 ersetze habe ich keine Warnungen.

Warum im letzten Fall IntelliJ warnt mich nicht, dass diese Bedingung immer falsch ist?

Ich benutze IntelliJ 14.1.5 und der verwendete Compiler ist javac in seiner Version 1.8.0_51.

enter image description here

+5

scheint ein Fehler in der Implementierung von IntelliJ kein Java Problem. Ich würde empfehlen, dies JetBrains zu melden. –

+3

Ich glaube nicht, dass es einen tiefen Grund gibt. Es muss nur ein Fehler sein, aber es ist ein ziemlich seltsamer. Wenn ich 'int i = 5 mache; if (i <= 2) 'Ich bekomme keine Warnung. –

+0

Wahrscheinlich https://youtrack.jetbrains.com/issue/IDEA-146950 –

Antwort

3

Wie Paul Boddington sagte in einem Kommentar sagt, es ist eigentlich etwas, das JetBrains vergessen hat, in ihrem Algorithmus zu implementieren, das war fixed a few days ago.

Vorher:

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

Nach:

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

Entsprechende Ausgabe: https://youtrack.jetbrains.com/issue/IDEA-146950

1

Dies wurde vor es zu meiner Aufmerksamkeit etwa eine Woche brachte so seine lustigen ich sah, nachdem auch hier bald auf. Ich habe mir das angeschaut und es ist schon so weit wie Intellij 10 passiert. Es gab ein paar Bugfixes für alle Aktualisierungen, aber das Problem wurde nicht eindeutig behoben.

Hier ist ein Link, wo Jetbrains auf den Fehler bezieht. Es gibt mehrere Fälle. IDEA-84489

Wenn seine stört Sie, versuchen Sie die Warnung über Alt + Enter zu unterdrücken, während Sie den Cursor über sie ist, und die Option wählen, die „Unterdrückung für ...“