Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java优化:局部变量或函数调用_Java_Variables_Optimization - Fatal编程技术网

Java优化:局部变量或函数调用

Java优化:局部变量或函数调用,java,variables,optimization,Java,Variables,Optimization,你会做什么 doThings(folder.getInstructions()) ; for (Instruction instruction : folder.getInstructions()) { // do things } functionCall(folder.getInstructions()) ; 或者这个: instructions = folder.getInstructions() ; doThings(instructions) for (Instruct

你会做什么

 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) ;

最重要的是,我想知道什么时候在局部变量中存储值更有效,什么时候进行函数调用更好。

可读性更强更有效。临时表达式和局部变量需要相同的空间,从CPU/JVM的角度看,这没有多大区别。JVM将在优化/嵌入它方面做得更好


但是,如果
getInstructions()
方法调用很昂贵,请将其缓存在局部变量中。如果它只是一个普通的getter,那么无论如何它都是内联的。此外,如果
getInstructions()
可能会随着时间的推移产生不同的结果,那么在特定情况下,局部变量的可读性更高,可能更正确。

每当您想多次使用方法的结果时,最好将方法调用的结果存储在某个临时变量中。。这节省了方法调用的处理时间。。在这种情况下,这不会产生太大影响。。但当有许多调用时,可能会产生影响

另外,请记住,局部变量存储在
堆栈上。所以,拥有一个临时的局部变量会占用堆栈上的空间。虽然在像这样的小案例中,这并不是什么大问题。。但应避免使用不必要的局部变量


因此,这两种方法都有优点和缺点

这完全取决于
getInstructions()
的功能。如果它只是返回一个字段的值,并且如果您确信字段值在调用之间不会改变,那么您可能不会看到这两个代码段之间的任何效率差异

另一方面,如果
getInstructions()
需要发出十几个web请求,那么显然您希望避免多次调用该请求

可读性比效率更重要。在本例中,我发现第二个选项更具可读性——更清楚的是,您希望使用相同的值执行三个单独的步骤(两个方法调用和一个循环)。另一方面,我很高兴写下这样的东西:

for (int i = 0; i < text.length(); i++) {
    ...
}
for(int i=0;i
而不是将其分解成单独的变量:

int length;
for (int i = 0; i < length; i++) {
    ...
}
int长度;
for(int i=0;i

这真的取决于上下文。从可读性的角度来看,有时一个额外的变量有帮助,有时没有。效率的观点完全取决于方法调用所做的事情,以及它对于JIT是否是“内置的”。

我的答案将取决于我试图开发的应用程序类型。比如说,

如果值在应用程序中快速更改,则第一个代码块更好。如果您需要精确的结果,这是很好的


如果您确信最初获取的值不会影响代码的其他部分,那么第二个是好的。

我相信这取决于具体情况。如果需要多次调用同一个方法(并且得到相同的值),最好只调用一次并将其存储到某个局部变量中

如果只需要调用函数一次。不需要使用局部变量