如果你有这样的三元条件:
(sum(a,b) > sum(b,c) ? sum(a,b) : sum(b,c))
以这种方式编写是否有效且干净? sum(a,b)
或sum(b,c)
评估两次?我怎样才能改善这个?
答案 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)
是的,它会被评估两次,也不容易维护。你需要重构方法调用。