Object.var-和Object.var- = 1之间的区别?

时间:2016-02-07 02:59:34

标签: java intellij-idea assert

今天我的IDE遇到了一个奇怪的警告:一段代码而没有另一条(假设相同的)代码的警告。 以下代码说if条件总是错误的:

public void foo(Node n) {
    assert(n.var > 0);
    n.var--;
    if (n.var == 0) {
         // do stuff
    }
}

虽然以下工作没有任何警告:

public void foo(Node n) {
    assert(n.var > 0);
    n.var -= 1;
    if (n.var == 0) {
         // do stuff
    }
}

使用以下课程:

public class Node {
    private int var;
}

虽然第一个警告显然是无稽之谈,但我想知道var--var-=1之间是否存在实际差异? 这实际上是我的IDE特有的警告吗?如果没有,请在评论中告诉我,我会相应地编辑这篇文章。

3 个答案:

答案 0 :(得分:3)

区别在于

int var = 1;
int x = (var -= 1); // x == 0

int x = var--; // x == 1 as the -- is post decrement.

注意:差异在很大程度上是作为独立声明的风格问题。我更喜欢较短的x--x++x-=1 / x+=-1x+=1

答案 1 :(得分:1)

这是IntelliJ IDEA中的一个错误。我已将其作为https://youtrack.jetbrains.com/issue/IDEA-151355提交,您可以通知它以了解其进展情况。

答案 2 :(得分:0)

正如Peter Lawrey所说:

x = var--  Means:  Step1: x = var; Step2 :var = var - 1;
var-=1 Means: Step1 : int temp = var - 1; Step2 : var = temp;