我用三元运算符尝试了以下内容,但我不明白为什么它没有编译。这个问题看起来很小,但我不明白,因此困扰我 -
第 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:
= += -= *= /= %= &= ^= |= <<= >>= >>>=
关于java - 三元运算符的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41365939/