假设条件检查包含方法调用以获取值。如果满足条件,则使用方法返回的值进行值更新。这是一个简化的例子。
// 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
答案 0 :(得分:2)
是的,该方法被调用两次。如果您只想调用一次,则需要将结果保存在if
之前的变量中。
int value = methodCall(x);
if (value > maxValue) maxValue = value;
请注意,该值保存在局部变量中(而不是字段)。
编辑:此用例的更优雅的解决方案(正如评论中bcsb1001所指出的)是使用Math#max
:
maxValue = Math.max(methodCall(x), maxValue);