IntelliJ - 当 i 已知时,不会出现条件 i >= 2 的警告消息
Posted
技术标签:
【中文标题】IntelliJ - 当 i 已知时,不会出现条件 i >= 2 的警告消息【英文标题】:IntelliJ - Warning message does not appear for the condition i >= 2 when i is known 【发布时间】:2016-02-05 06:06:18 【问题描述】:IntelliJ 上的以下程序
public static void main(String[] args)
int i = 0;
if (i <= 2)
System.out.println("ok");
警告我“条件 'i i > 2 替换条件,我会得到“条件'i > 2'总是'假'”。与i == 2
相同。
但如果我用i >= 2
替换它,我没有任何警告。
为什么在最后一种情况下 IntelliJ 没有警告我这个条件总是错误的?
我使用的是 IntelliJ 14.1.5,使用的编译器是 1.8.0_51 版本的 javac。
【问题讨论】:
似乎是 Intellij 实现中的一个错误,而不是 Java 问题。我建议将此报告给 JetBrains。 我认为没有什么深层次的原因。它一定只是一个错误,但它是一个相当奇怪的错误。如果我这样做int i = 5; if (i <= 2)
我不会收到警告。
可能是youtrack.jetbrains.com/issue/IDEA-146950
我投票结束这个问题,因为它更像是一个错误报告而不是一个问题
【参考方案1】:
就像 Paul Boddington 在评论中所说的那样,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
【讨论】:
【参考方案2】:大约一周前引起了我的注意,所以我很快也在这里看到了它,这很有趣。我调查了它,它显然早在 Intellij 10 就已经发生了。在所有更新中都有一些错误修复,但问题尚未得到明确修复。
这是 Jetbrains 引用该错误的链接。有多种情况。 IDEA-84489
如果它困扰您,请尝试在光标悬停时通过 Alt+Enter 抑制警告,然后选择“抑制...”选项
【讨论】:
以上是关于IntelliJ - 当 i 已知时,不会出现条件 i >= 2 的警告消息的主要内容,如果未能解决你的问题,请参考以下文章
IntelliJ 在运行所有测试时不会刷新多模块测试中的 Spring 自动配置
Intellij IDEA Java 类不会在保存时自动编译
Intellij Idea问题之Authentication Failed 错误