![](/img/trans.png)
[英]Generics compilation error with ternary operator in Java 8, but not in Java 7
[英]compilation error with ternary operator
我尝试使用三元运算符以下,但我不明白为什么它不编译。 这个问题似乎很小,但我不明白,因此困扰我-
第1行 -> int a = false? y + = 1:(x * = 10);
第2行 -> int b = false? y + = 1:x * = 10;
第1行编译,但是第2行不编译。 为什么呢
在第3个操作数而不是第2个操作数的情况下,括号有何不同? 我不必在第二/第三操作数中使用括号与其他任何内容(一元,字符串,基本算术...)为什么只使用赋值运算符,而又太具体地使用第三操作数呢?
提前致谢 !
如果在x*=10
周围没有()
,则*=
运算符的整个左侧操作数为false ? y+=1 : x
false ? y+=1 : x
,就好像您有:
int b = (false ? y+=1 : x)*=10;
和false ? y+=1 : x
false ? y+=1 : x
不是变量,不能是*=
的左操作数。
在优先级列表中 ,条件运算符( ? :
:)下的赋值运算符(包括复合赋值, *=
等)非常低:
运算符优先
- 后缀:
expr ++ expr --
- 一元:
++ expr -- expr + expr - expr ~ !
- 乘法:
* / %
- 加成物:
+ -
- 班次:
<< >> >>>
- 关系:
< > <= >= instanceof
- 平等:
== !=
- 按位:AND
&
- 按位:异或
^
- 按位:包含或
|
- 逻辑:AND
&&
- 逻辑:OR
||
- 三元:
? :
? :
- 分配:
= += -= *= /= %= &= ^= |= <<= >>= >>>=
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.