java - 返回(n > 2)? n = 5 : n = 4; doesn't work?

标签 java ternary

为什么会返回错误

return (n > 2) ? n = 5 : n = 4;

但这不是

return (n > 2) ? n = 5 : n + 4;

是否应该根据这两种情况返回n

最佳答案

您的代码无法编译,因为三元运算符具有更高的 operator precedence 比赋值运算符:

Operator Precedence

  1. postfix (expr++ expr--)
  2. unary (++expr --expr +expr -expr ~ !)

...

  1. ternary (? :)
  2. assignment (= += -= *= /= %= &= ^= |= <<= >>= >>>=)

解析代码时

(n > 2) ? n = 5 : n = 4;

它将像这样解析它:

(n > 2) ? n = 5 : n     // ternary operator
                    = 4 // assignment operator

这会产生如下伪代码:

someResultValue 
                = value;

那是行不通的,你会得到如下编译错误:

'Syntax error on token "=", <= expected'

'Type mismatch: cannot convert from Object & Comparable<?> & Serializable to int'.

可以使用圆括号让java把三元运算符的第三个参数看成n = 4 .代码如下所示:

return (n > 2) ? n = 5 : (n = 4);

关于java - 返回(n > 2)? n = 5 : n = 4; doesn't work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66621301/

相关文章:

JavaScript 三元运算符和 if/else 语句

c# - 循环实现中的三元运算符

ruby-on-rails - Ruby 三元运算符 if else

javascript - 如何在 Javascript 中使用三元运算符来确定某物是偶数还是奇数?

java - 基于 AOP 的持久性、事务和消息传递示例

java - 在 StringBuilder 中包含换行符

java - Eclipse Luna - 项目未显示 - 奇怪

java - Eclipse e4 禁用最大化部分

perl - 三元产生与 If 不同的结果

java - 在导出的jar文件中添加fxml文件