今天我的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特有的警告吗?如果没有,请在评论中告诉我,我会相应地编辑这篇文章。
答案 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+=-1
或x+=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;