doThings(folder.getInstructions()) ;
for (Instruction instruction : folder.getInstructions()) {
// do things
}
functionCall(folder.getInstructions()) ;
或者这个:
instructions = folder.getInstructions() ;
doThings(instructions)
for (Instruction instruction : instructions) {
// do things
}
functionCall(instructions) ;
最重要的是,我想知道何时将值存储在局部变量中更有效,以及什么时候更好地进行函数调用。
答案 0 :(得分:21)
更具可读性更高效。临时表达式和局部变量需要相同的空间,从CPU / JVM的角度来看,它没有太大的区别。 JVM将更好地优化/使用它。
但是,如果getInstructions()
方法调用很昂贵,缓存它在局部变量中。如果它只是一个简单的吸气剂,它无论如何都会被内联。此外,恕我直言,在您的特定情况下,局部变量 更具可读性,如果getInstructions()
随着时间的推移可能会有不同的结果,则可能更正确。
答案 1 :(得分:10)
这完全取决于getInstructions()
的作用。如果它只是返回字段的值 - 和,如果您确信字段值不会在调用之间发生变化 - 那么您可能看不到两个片段之间的任何效率差异。 / p>
另一方面,如果getInstructions()
需要发出十几个网络请求,那么显然你想避免多次打电话。
可读性比效率更重要。在这种情况下,我发现第二个选项无论如何都更具可读性 - 您希望采用具有相同值的三个单独步骤(两个方法调用和一个循环)更清楚。另一方面,我很高兴写出类似的东西:
for (int i = 0; i < text.length(); i++) {
...
}
而不是将 分成一个单独的变量:
int length;
for (int i = 0; i < length; i++) {
...
}
这实际上取决于背景。有时,从可读性的角度来看,额外的变量有助于(有时不会)。 效率透视图完全取决于方法调用的作用,以及它是否对JIT来说是“无法解决的”。
答案 2 :(得分:0)
每当你想要多次使用方法的结果时,最好将方法调用的结果存储在某个临时变量中。这样可以节省方法调用的处理时间。这不会影响到这个case ..但是当有很多调用时可能会影响..
另外,请记住,您的本地变量存储在stack
上。因此,拥有临时局部变量会占用堆栈空间。虽然这在像这样的小案例中并不是很重要..但是应该避免不必要的局部变量..
因此,这两种方法都有专业和缺点 ..
答案 3 :(得分:0)
我的回答取决于我正在尝试开发的类型的应用程序。例如,
如果值在应用程序期间快速更改,第一个代码块会更好。如果您需要准确的结果,这很好。
如果你确定最初提取的值不会影响代码的其他部分,那么第二个就好了。
答案 4 :(得分:0)
我认为这取决于具体情况。如果它需要多次调用相同的方法(并且你得到相同的值)并且更好地进行一次调用并将其存储到某个局部变量中。
如果您只需要调用该函数一次。无需去寻找局部变量。