我用三元运算符尝试了以下内容,但我不明白它为什么不编译。这个问题看起来很小但我不理解,因而困扰我 -
第1行 - > int a = false? y + = 1:(x * = 10);
第2行 - > int b = false? y + = 1:x * = 10;
第1行但是第2行不会编译。为什么?
如果第3个操作数而不是第二个操作数,括号如何产生差异。我没有必要在第二/第三个操作数中使用括号(一元,字符串,基本算术...)为什么只是赋值运算符,而且特别是第三个操作数?
提前致谢!
答案 0 :(得分:6)
()
周围没有x*=10
,*=
运算符的整个左侧操作数为false ? y+=1 : x
,就像您有:{/ p>
int b = (false ? y+=1 : x)*=10;
由于false ? y+=1 : x
不是变量,因此它不能是*=
的左手操作数。
赋值运算符(包括复合赋值,*=
等)在条件运算符(? :
)下面的precedence list非常非常低:
运营商优先
- 后缀:
expr++ expr--
- 一元:
++expr --expr +expr -expr ~ !
- 乘法:
* / %
- 添加剂:
+ -
- shift:
<< >> >>>
- relational:
< > <= >= instanceof
- 平等:
== !=
- 按位:AND
&
- 按位:独占OR
^
- 按位:包含OR
|
- 逻辑:AND
&&
- 逻辑:或
||
- 三元:
? :
- 任务:
= += -= *= /= %= &= ^= |= <<= >>= >>>=