假设条件检查包含获取值的方法调用。如果满足条件,则使用该方法返回的值进行值更新。这是一个简化的示例。
// x and maxValue are e.g. both int, methodCall(x) returns int
if (methodCall(x) > maxValue) maxValue = methodCall(x);
如果条件满足,JVM 是否会调用 methodCall 2 次?有没有办法避免这种性能损失(无需将 methodCall(x) 分配给局部变量,从而牺牲内存和计算时间)并直接重新使用条件检查的结果进行分配?
哈根
最佳答案
是的,该方法被调用两次。如果只想调用一次,则需要将结果保存在 if
之前的变量中。
int value = methodCall(x);
if (value > maxValue) maxValue = value;
请注意,该值保存在局部变量(而不是字段)中。
编辑:此用例的更优雅的解决方案(正如 bcsb1001 在评论中指出的那样)是使用 Math#max
:
maxValue = Math.max(methodCall(x), maxValue);
关于java - 减少测试条件和更新值时的重复方法调用(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36965927/