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

标签 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) 分配给局部变量,从而牺牲内存和计算时间)并直接重新使用条件检查的结果进行分配?

哈根

最佳答案

是的,该方法被调用两次。如果只想调用一次,则需要将结果保存在 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/

相关文章:

JavaFX 在边框 Pane 中居中一个可调整大小的圆弧

java - 在谷歌应用引擎和 GET 中使用 SOAP 网络服务

java - 使边界框与另一个边界框相等 : Opencv , Android

performance - 我可以减少 Google Maps JavaScript API v3 中的请求量吗?

c# - x64 与 x86 具有如此不同的性能结果背后的原因是什么?

python - 使用 Tkinter 快速显示图像

java - 如何在 android studio 的 recyclerview 中从 firebase 数据库中检索数组列表?

java - 使用 Glassfish 3.1.2 服务器时,属性文件中的更改不会反射(reflect)在页面中

performance - 具有暂停和恢复功能的JavaScript录音机

python - 广播的 NumPy 算法 - 为什么一种方法的性能如此之高?