三元运算符如果运算符在常规内

Sop*_*ner 1 java if-statement ternary-operator

在Java中,如果我在常规if中使用三元if运算符,例如:

if ((x > y - z) ? true : callLongWaitedMethod(many, parameteres)) {
        loveTeddyBear();
}
Run Code Online (Sandbox Code Playgroud)

如果x > y - z确实如此,它会执行callLongWaitedMethod 吗?我希望它不是,我可以使用这个漂亮的声明,乍一看稍微复杂,但与额外的布尔变量比较更有吸引力:

boolean b = (x > y - z) ? true : callLongWaitedMethod(many, parameteres);
if (b) {
        loveTeddyBear();
}
Run Code Online (Sandbox Code Playgroud)

特别是如果我在一个循环遍历的大循环中使用它,那么从性能的角度来看每次创建布尔值都不会很好,而如果我在循环外声明布尔值,我可能会因为循环的大尺寸.

Don*_*oby 6

这将按你的意愿工作,但简单地使用普通||算子来完成完全相同的结果会更清楚:

if ((x > y - z) || callLongWaitedMethod(many, parameteres)) {
        loveTeddyBear();
}
Run Code Online (Sandbox Code Playgroud)

  • 不,除非第一个为false,否则不会执行callLongWaitedMethod.如果第一个参数为true,则`||`运算符不会计算第二个参数. (2认同)