在java中使用for-each循环

Vin*_*uri 5 java

在我的代码中,

for(City city : country.getCities()){
   // do some operations
}
Run Code Online (Sandbox Code Playgroud)

使用country.getCities()是否代价高昂?JVM是否会为每次调用维护堆栈跟踪..?

List<City> cityList = country.getCities();
for(City city : cityList){
   // do some operations
}
Run Code Online (Sandbox Code Playgroud)

什么是最好的使用方法?

Jon*_*eet 9

不,这个循环:

for(City city : country.getCities())
Run Code Online (Sandbox Code Playgroud)

只会调用country.getCities() 一次,然后迭代它.它不会为循环的每次迭代调用它.在你的情况下它相当于:

for (Iterator<City> iterator = country.getCities().iterator();
     iterator.hasNext(); ) {
    City city = iterator.next();
    // do some operations
}
Run Code Online (Sandbox Code Playgroud)

根据你的第二个片段重写它没有任何好处.

有关更多详细信息,请参阅JLS的第14.14.2节.