2015-11-04 8 views
6

次のプログラムは、私を警告するための警告メッセージが表示されない "条件" I = 2 <はいつも '真' です"。 条件をi > 2に置き換えた場合、「条件 'i> 2'は常に「false」」になります。 i == 2と同じです。のIntelliJ - IntelliJの</p> <pre><code>public static void main(String[] args) { int i = 0; if (i <= 2) { System.out.println("ok"); } } </code></pre> <p>上の条件I> = 2 iは知られている

私はそれをi >= 2と置き換えても、私には警告がありません。

なぜ最後のケースでIntelliJがこの条件が常に偽であると警告しないのですか?

私はIntelliJ 14.1.5を使用していますが、コンパイラは1.8.0_51バージョンでjavacを使用しています。

enter image description here

+5

はのIntelliJないのJava問題の実装における障害のように思えます。これをJetBrainsに報告することをお勧めします。 –

+3

私は深い理由はないと思います。それはちょうどバグでなければならないが、むしろ奇妙なものだ。私が 'int i = 5; if(i <= 2) '私は警告を受けません。 –

+0

おそらくhttps://youtrack.jetbrains.com/issue/IDEA-146950 –

答えて

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キー+カーソルがその上にある間に入力して、ポールBoddingtonが、それはだ、コメントで言ったように

関連する問題

 関連する問題