Lyt*_*yth 10 java variables optimization
你会做什么?
doThings(folder.getInstructions()) ;
for (Instruction instruction : folder.getInstructions()) {
// do things
}
functionCall(folder.getInstructions()) ;
Run Code Online (Sandbox Code Playgroud)
或这个 :
instructions = folder.getInstructions() ;
doThings(instructions)
for (Instruction instruction : instructions) {
// do things
}
functionCall(instructions) ;
Run Code Online (Sandbox Code Playgroud)
最重要的是,我想知道何时将值存储在局部变量中更有效,何时更好地进行函数调用.
Tom*_*icz 21
更具可读性更有效.临时表达式和局部变量需要相同的空间,从CPU/JVM的角度来看,它没有太大的区别.JVM将更好地优化/使用它.
但是,如果getInstructions()方法调用很昂贵,请将其缓存在局部变量中.如果它只是一个简单的吸气剂,它无论如何都会被内联.此外恕我直言,你的具体情况局部变量是更具可读性,甚至更正确的,如果getInstructions()可能有一段时间不同的结果.
Jon*_*eet 10
这完全取决于做什么getInstructions().如果它只是返回字段的值 - 并且如果您确信字段值不会在调用之间发生变化 - 那么您可能看不到两个片段之间的任何效率差异.
另一方面,如果getInstructions()需要发出十几个Web请求,那么显然您希望避免多次调用.
可读性比效率更重要.在这种情况下,我发现第二个选项无论如何都更具可读性 - 您希望采用具有相同值的三个单独步骤(两个方法调用和一个循环)更清楚.另一方面,我很高兴写下这样的东西:
for (int i = 0; i < text.length(); i++) {
...
}
Run Code Online (Sandbox Code Playgroud)
而不是将其分解为单独的变量:
int length;
for (int i = 0; i < length; i++) {
...
}
Run Code Online (Sandbox Code Playgroud)
这取决于具体情况.有时,从可读性的角度来看,额外的变量有助于(有时不会).在效率角度来看是完全取决于什么方法调用是干什么的,无论是在JIT"可以内联".