为什么会返回错误
return (n > 2) ? n = 5 : n = 4;
但这不是
return (n > 2) ? n = 5 : n + 4;
是否应该根据这两种情况返回n
?
最佳答案
您的代码无法编译,因为三元运算符具有更高的 operator precedence
比赋值运算符:
Operator Precedence
- postfix (
expr++ expr--
)- unary (
++expr --expr +expr -expr ~ !
)...
- ternary (
? :
)- 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/