Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 函数被评估了多少次?_Java - Fatal编程技术网

Java 函数被评估了多少次?

Java 函数被评估了多少次?,java,Java,如果有这样的三元条件: (sum(a,b) > sum(b,c) ? sum(a,b) : sum(b,c)) 这样写是否高效、干净?sum(a,b)或sum(b,c)是否计算了两次?我该如何改进这一点 是的,它被评估了两次(嗯,可能有一些我不知道的(JIT)编译器/JVM优化,但你不能依赖于此) 计算三元运算符之前的值: int sumAB = sum(a, b); int sumBC = sum(b, c); sumAB > sumBC ? sumAB : sumBC;

如果有这样的三元条件:

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

这样写是否高效、干净?
sum(a,b)
sum(b,c)
是否计算了两次?我该如何改进这一点

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

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

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

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

是的,它们将被评估两次

您可以这样做:

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

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

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

是的,它将被计算两次,也不容易维护。您需要重构方法调用。

似乎“b”是无条件的

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

@Bozho,@Ralph:也许问题在于三元运算符是否有延迟求值。不是这个特别的usage@Goran-也许是的,但我认为答案至少值得投一票也许没有那么多;)这甚至没有保存字符(至少没有太大意义;使用
max
函数的长度可能差不多,甚至更短)。这真是太糟糕了。@unbeli:任何人想要使用三元运算符的唯一两个好理由是:1)如你所说,为了节省源代码字节,2)如果他们想将其
if-else
作为要计算的表达式来编写。这个答案适用于两种情况。第一个是显而易见的,第二个我甚至把赋值当作一个表达式。我猜这个问题是关于探索一种语言的特性,所以这是一个奇特的答案。