三元运算符的编译错误
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:
= += -= *= /= %= &= ^= |= <<= >>= >>>=
我用三元运算符尝试了以下操作,但我不明白为什么它无法编译。这个问题看起来很小,但我不明白,因此困扰我 -
第 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:
= += -= *= /= %= &= ^= |= <<= >>= >>>=