我最近在一段java代码中看到了这个三元操作语句:
int getVal(Integer number, boolean required) {
Integer val = number == null ? required ? 1 : 2 : 3;
return val;
}
我从未见过一个三元语句在一行中有两个问号(没有任何括号)。如果我玩输入值,我可以得到 1
返回,如果 number == null
以及 3
否则就得回去,但要求什么似乎无关紧要, 2
永远不会被归还。
这句话是什么意思(即,我应该如何理解它作为一个词的声明 true
/ false
条件)以及输入需要是什么 2
要退货吗?
5条答案
按热度按时间mfpqipee1#
感谢@luk2302和@racraman的回答!根据你的理解:
我只想补充一点,把这个“解读”为真理陈述的方法是:
我希望这有助于其他人谁可能有困难阅读此声明。
(注:我不确定是否最好将此作为问题的更新发布,但从技术上讲,这是“解释”,似乎答案是最好的地方。如果你喜欢我的答案,请投票@luk2302和@racraman,因为他们是这个添加的灵感来源)
hgc7kmma2#
这就是为什么显式地添加括号总是一个好主意,这样一眼就可以清楚地看到意图:
crcmnpdw3#
应该加上括号,这样理解起来就更清楚了
Integer val = number == null ? (required ? 1 : 2) : 3;
这相当于输入需要2才能返回
number = null
以及required = false
b09cbbtk4#
它只是一个嵌套的三元语句。通过添加括号更清晰:
返回2需要什么输入?
number = null
以及required = false
aemubtdh5#
形式的表达
a ? b ? c : d : e
使用条件运算符两次。唯一模棱两可的是顺序。这并不意味着
(a ? b) ? c : d : e
因为那是个语法错误。因此,它必须意味着
a ? (b ? c : d) : e
.即相当于:
一个更有趣的例子是
可以理解为
或
为了解决这种模糊性,java语言规范写道:
条件运算符在语法上是右联想的(它从右向左分组)