三元运算符的编译错误

时间:2016-12-28 16:21:34

标签: java operator-keyword ternary

我用三元运算符尝试了以下内容,但我不明白它为什么不编译。这个问题看起来很小但我不理解,因而困扰我 -

第1行 - > int a = false? y + = 1:(x * = 10);

第2行 - > int b = false? y + = 1:x * = 10;

第1行但是第2行不会编译。为什么?

如果第3个操作数而不是第二个操作数,括号如何产生差异。我没有必要在第二/第三个操作数中使用括号(一元,字符串,基本算术...)为什么只是赋值运算符,而且特别是第三个操作数?

提前致谢!

1 个答案:

答案 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 &&
  •   
  • 逻辑:或||
  •   
  • 三元:? :
  •   
  • 任务:= += -= *= /= %= &= ^= |= <<= >>= >>>=
  •