在我的代码中,
for(City city : country.getCities()){
// do some operations
}
使用 country.getCities() 成本高吗?JVM 会为每次调用维护堆栈跟踪吗?
List<City> cityList = country.getCities();
for(City city : cityList){
// do some operations
}
最好的使用方法是什么?
在我的代码中,
for(City city : country.getCities()){
// do some operations
}
使用 country.getCities() 成本高吗?JVM 会为每次调用维护堆栈跟踪吗?
List<City> cityList = country.getCities();
for(City city : cityList){
// do some operations
}
最好的使用方法是什么?
不,这个循环:
for(City city : country.getCities())
只会调用country.getCities()
一次,然后对其进行迭代。它不会为循环的每次迭代调用它。在您的情况下,它相当于:
for (Iterator<City> iterator = country.getCities().iterator();
iterator.hasNext(); ) {
City city = iterator.next();
// do some operations
}
根据您的第二个片段重写它没有任何好处。
有关详细信息,请参阅JLS 的第 14.14.2 节。
在这两种情况下,getCities()
都只调用一次。
默认免责声明:与往常一样,您几乎不需要担心性能,因为编译器在这方面比一个人要好得多。
这些是等价的。getCities()
只会执行一次。(如果你坚持System.out.println()
这种方法,你应该看到这个)。
请注意,它不会getCities()
多次调用,不仅是出于性能原因,还因为不能保证每次都会返回相同的集合(它返回相同的集合可能很直观,但不是强制性的)
为了简洁起见,我更喜欢你的第一个例子。
两者都是一样的,没有区别。并将country.getCities()
在循环中调用一次。
我认为第一个更好,因为没有使用额外的参考。
JVM 会在编译代码时对其进行优化,以确保country.getCities()
方法被调用一次。
您应该以您和/或您的团队认为最易读的方式编写代码。