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

时间:2018-10-25 05:38:23

标签: java if-statement

类似于以下问题,但是我正在扩展更具体的查询。同样,这也就是否使用if / else的三元样式或普通样式留出了意见。 Applying increment using ternary operator in Java

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

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 ++”处更改的值

同样,当我在应用程序中运行此命令时,数据变量保持不变。但是,当我将代码行更改为此:

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

有效。

那么,这使我想知道在此上下文中是否允许使用++ /-运算符?  有人对此有任何意见吗?

4 个答案:

答案 0 :(得分:4)

后增(data++)和后减(data--)运算符在变量的增/减前返回变量的值,因此将其赋回变量将取消增量/递减。

您可以改用预增和预减(或像以前一样使用data + 1data - 1

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

答案 1 :(得分:0)

因为它只检查条件并返回条件为真或假的答案,所以如果您真的想应用增量减法,则它不能与增量减法运算符一起使用,因为您可以应用循环,并且在这种情况下可以进行计数操作如果计数递增,则执行递增操作,否则执行递减操作

答案 2 :(得分:0)

在三元运算符中,如果将其分解,它将是

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;

答案 3 :(得分:0)

您还可以从语句中删除分配,它将正常工作。即

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