测试条件和更新值时减少重复的方法调用(java)

时间:2016-05-01 11:05:29

标签: java performance

假设条件检查包含方法调用以获取值。如果满足条件,则使用方法返回的值进行值更新。这是一个简化的例子。

// x and maxValue are e.g. both int, methodCall(x) returns int    
if (methodCall(x) > maxValue) maxValue = methodCall(x);

如果条件满足,JVM是否会调用methodCall 2次?有没有办法避免这种性能损失(没有将methodCall(x)分配给牺牲内存和计算时间的局部变量)并直接重新使用条件检查的结果进行分配?

Hargen

1 个答案:

答案 0 :(得分:2)

是的,该方法被调用两次。如果您只想调用一次,则需要将结果保存在if之前的变量中。

int value = methodCall(x);
if (value > maxValue) maxValue = value;

请注意,该值保存在局部变量中(而不是字段)。

编辑:此用例的更优雅的解决方案(正如评论中bcsb1001所指出的)是使用Math#max

maxValue = Math.max(methodCall(x), maxValue);