Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Function_For Loop_Iteration - Fatal编程技术网

如何在Java中迭代函数返回的数组

如何在Java中迭代函数返回的数组,java,arrays,function,for-loop,iteration,Java,Arrays,Function,For Loop,Iteration,迭代函数返回的数组的最佳方法是什么 例如: for (String s : collectMyStrings()){ System.out.println(s); } 是在每次迭代中调用collectMyStrings(),还是Java只调用它一次,并将返回的数组用于for循环的所有迭代?它将只被调用一次,并且将为返回的数组创建一个迭代器(隐式)。它将只被调用一次,并且将为返回的数组创建一个迭代器(隐式)。只调用一次方法collectMyStrings(),以获取要迭代的数组/集合。方法c

迭代函数返回的数组的最佳方法是什么

例如:

for (String s : collectMyStrings()){
  System.out.println(s);
}

是在每次迭代中调用collectMyStrings(),还是Java只调用它一次,并将返回的数组用于for循环的所有迭代?

它将只被调用一次,并且将为返回的数组创建一个迭代器(隐式)。

它将只被调用一次,并且将为返回的数组创建一个迭代器(隐式)。

只调用一次方法
collectMyStrings()
,以获取要迭代的数组/集合。

方法
collectMyStrings()
只调用一次,以获取要迭代的数组/集合。

对于数组,For-each循环由Java编译器转换为带有索引变量的普通For循环。这意味着您的代码片段大致相当于:

String[] strings = collectMyStrings();
int length = strings.length;

for (int i = 0; i < length; i++) {
    String s = strings[i];
    System.out.println(s);
}
String[]strings=collectMyString();
int length=strings.length;
for(int i=0;i

因此,如您所见,该方法只被调用一次。即使数组的length属性也只被读取一次。

对于数组,For-each循环由Java编译器转换为带有索引变量的普通For循环。这意味着您的代码片段大致相当于:

String[] strings = collectMyStrings();
int length = strings.length;

for (int i = 0; i < length; i++) {
    String s = strings[i];
    System.out.println(s);
}
String[]strings=collectMyString();
int length=strings.length;
for(int i=0;i

因此,正如您所看到的,该方法只被调用一次。即使数组的length属性也只被读取一次。

您可以通过尝试来回答自己的问题!是的,但我希望有文档记录,如果其他人尝试google,就像我做的那样。如果您真的担心,您可以始终将其保存为变量,然后在变量上循环。但是我认为nk它只会调用一次。你可以通过尝试来回答你自己的问题!是的,但我喜欢有文档记录,如果其他人尝试google,就像我做的那样如果你真的担心,你总是可以将它保存为变量,然后在变量上循环。但我认为它只会调用一次。对于数组,编译器会转换For each循环into一个带有索引变量的普通for循环。只有
Iterable
对象上的每个循环被转换为基于迭代器的循环。只是为了给这个循环添加多一点上下文。我认为您不能/不应该修改正在迭代的内容。因此编译器缓存返回的Iterable是有意义的。对于数组,compiler使用索引变量将for-each循环转换为普通的for循环。只有
Iterable
对象上的for-each循环才会转换为基于迭代器的循环。只是为了给这个循环添加多一点上下文。我相信您不能/不应该修改正在迭代的内容。因此,编译器将其缓存掉是有意义的他回来了。