【问题标题】:compilation error with ternary operator三元运算符编译错误
【发布时间】:2017-05-12 23:11:37
【问题描述】:

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

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

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

Line 1 可以编译,但 Line 2 不会。为什么 ?

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

提前致谢!

【问题讨论】:

    标签: java operator-keyword ternary


    【解决方案1】:

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

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

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

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

    运算符优先级

    • 后缀:<em>expr</em>++ <em>expr</em>--
    • 一元:++<em>expr</em> --<em>expr</em> +<em>expr</em> -<em>expr</em> ~ !
    • 乘法:* / %
    • 添加剂:+ -
    • 班次:&lt;&lt; &gt;&gt; &gt;&gt;&gt;
    • 关系:&lt; &gt; &lt;= &gt;= instanceof
    • 平等:== !=
    • 按位:与&amp;
    • 按位:异或^
    • 按位:包含或|
    • 逻辑:与&amp;&amp;
    • 逻辑:或||
    • 三元:? :
    • 分配:= += -= *= /= %= &amp;= ^= |= &lt;&lt;= &gt;&gt;= &gt;&gt;&gt;=

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 2012-12-18
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 2019-01-09
      • 2018-04-11
      • 2014-05-03
      • 2012-11-19
      相关资源
      最近更新 更多