类似于以下问题,但是我正在扩展更具体的查询。同样,这也就是否使用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;
有效。
那么,这使我想知道在此上下文中是否允许使用++ /-运算符? 有人对此有任何意见吗?
答案 0 :(得分:4)
后增(data++
)和后减(data--
)运算符在变量的增/减前返回变量的值,因此将其赋回变量将取消增量/递减。
您可以改用预增和预减(或像以前一样使用data + 1
和data - 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;