Java中三元运算符的优先级和赋值

Ily*_*kov 0 java ternary-operator

为什么bar下面的方法可以编译却编译foo失败?

在此输入图像描述

res*_*man 5

这是因为Java 的优先规则。赋值的先例比 或 低?:因此它最后被评估。

这意味着该案例的bar解析如下:

return (s != null ? s : s) = "bar";
Run Code Online (Sandbox Code Playgroud)

这对编译器来说没有意义。

如果插入我上面显示的括号,您将看到编译器在同一位置失败并显示相同的错误消息,因为两者实际上是相同的。