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+=-1
或 x+=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,您可以观看它以了解其进度。
今天,我的 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+=-1
或 x+=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,您可以观看它以了解其进度。