三元运算符的编译错误

compilation error with ternary operator

我用三元运算符尝试了以下操作,但我不明白为什么它无法编译。这个问题看起来很小,但我不明白,因此困扰我 -

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

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

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

括号在第三个操作数而不是第二个操作数的情况下有何不同。我不必在第二个/第三个操作数(一元、字符串、基本算术...)中使用括号和其他任何东西。为什么只使用赋值运算符,特别是第三个操作数?

提前致谢!

没有 x*=10 周围的 ()*= 运算符的整个左侧操作数是 false ? y+=1 : x,就像您有:

int b = (false ? y+=1 : x)*=10;

并且由于 false ? y+=1 : x 不是变量,所以它不能是 *= 的左侧操作数。

赋值运算符(包括复合赋值,*=等)在precedence list中非常非常低,低于条件运算符(? :):

Operators Precedence

  • postfix: <em>expr</em>++ <em>expr</em>--
  • unary: ++<em>expr</em> --<em>expr</em> +<em>expr</em> -<em>expr</em> ~ !
  • multiplicative: * / %
  • additive: + -
  • shift: << >> >>>
  • relational: < > <= >= instanceof
  • equality: == !=
  • bitwise: AND &
  • bitwise: exclusive OR ^
  • bitwise: inclusive OR |
  • logical: AND &&
  • logical: OR ||
  • ternary: ? :
  • assignment: = += -= *= /= %= &= ^= |= <<= >>= >>>=