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

Difference between Object.var- - and Object.var-=1?

今天,我的 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
    }
}

具有以下class:

public class Node {
    private int var;
}

虽然第一个警告显然是无稽之谈,但我想知道 var--var-=1 之间是否真的有区别..? 这实际上是针对我的 IDE 的警告吗?如果没有,请在评论中告诉我,我将相应地编辑此 post。

区别在于

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

正如彼得劳瑞所说:

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

这是 IntelliJ IDEA 中的错误。我已将其归档为 https://youtrack.jetbrains.com/issue/IDEA-151355,您可以观看它以了解其进度。