Java 为什么增量运算符(++/--)在使用三元if/else运算符时不起作用?

Java 为什么增量运算符(++/--)在使用三元if/else运算符时不起作用?,java,if-statement,Java,If Statement,与下面的问题类似,不过,我会进一步提出更具体的问题。此外,这是搁置关于是否使用if/else的三元或正常样式的意见。 因此,理论上,以下代码片段: if (text.equals("foo")) data++; else if (text.equals("bar")) data--; 使用三元运算符时应如下所示: data = text.equals("foo") ? data++ : text.equals("bar") ? data-- : data; 然而,在我的an

与下面的问题类似,不过,我会进一步提出更具体的问题。此外,这是搁置关于是否使用if/else的三元或正常样式的意见。

因此,理论上,以下代码片段:

if (text.equals("foo"))
    data++;
else if (text.equals("bar"))
    data--;
使用三元运算符时应如下所示:

data = text.equals("foo") ? data++ : text.equals("bar") ? data-- : data;
然而,在我的android Java应用程序中,android studio向我显示了一个警告:

从未使用在“data++”处更改的值

和wise一样,当我在应用程序中运行这个时,数据变量保持不变。但是,当我将代码行更改为:

data = text.equals("foo") ? data + 1 : text.equals("bar") ? data - 1 : data;
成功了

所以,这让我想知道在这个上下文中是否允许使用++/-运算符? 有人对此有任何输入吗?

增量后数据++和减量后数据-运算符返回变量在增量/减量之前的值,因此将其分配回变量将取消增量/减量

您可以使用预增量和预减量,也可以使用数据+1和数据-1,如下所示:

data = text.equals("foo") ? ++data : text.equals("bar") ? --data : data;

因为它只检查条件并在条件为true或false时返回答案,所以如果您真的想应用增量减量,它不能使用增量减量运算符,因为您可以应用循环,并且在该条件下,如果执行计数增量,则执行计数操作,否则将执行增量操作在三元运算符中执行减量运算

,如果您将其分解,它将

if(text.equals("foo")){
data = data++;
} else if(text.equals("bar")){
data = data--;
} else {
data = data;
}
您正在对变量使用后增量和后减量运算符,该变量分配给自身。这可以作为

data = data++; This can be seen as 
int temp = data; 
data = data +1;
data = temp;
与增量后的情况相同。所以在任何情况下,数据值都不会改变。 以身作则

data = 10;
int temp = data;// temp = 10;
data = data + 1; // data = 11;
data = temp; // data = 10;

您还可以从语句中删除赋值,它将正常工作。i、 e

text.equals("foo") ? data++ : text.equals("bar") ? data-- : data;

++在变量之后,在赋值之后应用。尝试使用++数据和-data。为什么不使用data+=text.equalsfoo?1:text.equalsbar-1:0以消除所有混淆?好吧,在仍然使用嵌套三元组的情况下,尽可能地消除混淆。不过,关于这应该是if还是三元组的讨论在这里非常相关。考虑到++和-已经将数据更改为您认为应该更改的数据,这里返回数据的赋值不仅是浪费,而且实际上是一个bug的来源;毫无疑问,这应该是一个if语句,除非您试图使代码不可维护,而且速度要慢一些纳秒。编译器知道data++对代码没有任何影响data++表示先赋值,然后递增。您能解释一下为什么需要循环吗?