评估的功能有多少次?

时间:2011-01-08 22:50:22

标签: java

如果你有这样的三元条件:

(sum(a,b) > sum(b,c) ? sum(a,b) : sum(b,c))   

以这种方式编写是否有效且干净? sum(a,b)sum(b,c)评估两次?我怎样才能改善这个?

5 个答案:

答案 0 :(得分:5)

对于这个特殊问题,你最好不要使用Math.max()而不是自己写出三元表达式逻辑。

答案 1 :(得分:4)

是的,它被评估两次(好吧,可能有一些我不知道的(JIT)编译器/ JVM优化,但你不能依赖它)

计算三元运算符之前的值。:

int sumAB = sum(a, b);
int sumBC = sum(b, c);
sumAB > sumBC ? sumAB : sumBC;

当然,对于一个简单的总和,差异可以忽略不计。但总的来说这是一个很好的做法。

答案 2 :(得分:1)

是的,他们将被评估两次。

你可以这样做:

 int x, y;
 ((x = sum(a,b)) > (y = sum(b,c))) ? x : y;

如果你真的想使用三元运算符。

答案 3 :(得分:1)

似乎'b'是无条件的。

sum(b, Math.max(a, c))   

答案 4 :(得分:0)

是的,它会被评估两次,也不容易维护。你需要重构方法调用。