java - 三元运算符的编译错误

标签 java operator-keyword ternary

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

第 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/

相关文章:

java - 将项目保存到 XML 文件中

operator-keyword - (??=) 双问号和等号,那个运算符有什么作用?

C++ 隐式类型转换

ruby-on-rails - Ruby 有更短的三元吗?

java - 有没有办法缩短这段代码?也许是三元表达式?

c++ - 我们在条件三元运算符中使用逗号时发现了什么?

java - 如何防止在事务提交时保存到 Hibernate 中的数据库?

java - 如何将每个请求存储在同一个文件中

c# - Nullable <= 与 == 比较结果

java - Spring集成路由到不同类中的子流