我有一个简短的问题:这样使用从句有什么影响吗:
for(Object obj : something.b.c.d.getList(){
...
}
或者这个
List list = something.b.c.d.getList();
for(Object obj : list){
...
}
我在想其中一个是否比另一个更快。
我有一个简短的问题:这样使用从句有什么影响吗:
for(Object obj : something.b.c.d.getList(){
...
}
或者这个
List list = something.b.c.d.getList();
for(Object obj : list){
...
}
主要区别在于风格。语义基本相同。唯一显著的语义差异在于,在第二个示例中,列表引用被命名,并且可以在循环内部和之后访问:
List list = something.b.c.d.getList();
for(Object obj : list){
if (list.contains(...)) { // inefficient, used purely as an illustration
...
}
}
int n = list.size();
在第一个示例中,如果不重新评估 something.b.c.d.getList()
,则无法实现上述功能。
如果你担心第一个示例会重复评估 something.b.c.d.getList()
,那是不必要的。你的两个示例都只评估表达式一次。
性能上可能没有区别,但整体性能取决于访问这些字段的成本(即从框架中进行延迟加载)。无论您选择为此循环使用哪种样式,访问字段只会发生一次。
如果两个项目都可以在增强的for语句中使用,则两种方法都是可接受的。
除非分析器将代码中的特定区域指定为问题点,否则不必担心此类优化。
Iterator<Object> it = list.iterator(); while (it.hasNext()) { ... }
。 - Dici