Str*_*hua 7 java performance for-loop
我可能试图过度效率,但我一直想知道以下两个代码示例中的哪一个会更快地执行.
假设你要它包含一个对象的引用ArrayList
的Strings
,你想通过该列表进行迭代.以下哪项更有效(即使只是略有不同)?
for(String s : foo.getStringList())
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
要么
ArrayList<String> stringArray = foo.getStringList();
for(String s : stringArray)
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
如您所见,第二个循环初始化对列表的引用,而不是每次迭代都调用它,因为它似乎是第一个示例.除非这个概念完全不正确,并且它们都以相同的方式运行,因为Java的内部工作方式创建了自己的引用变量.
所以我的问题是,它是什么?
没有区别,因为两个循环最终只能在循环开始时获取并维护对表达式的Iterator的引用.以下是Java语言规范的摘录:
增强的for语句相当于表单的基本for语句:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
VariableModifiersopt TargetType Identifier =
(TargetType) #i.next();
Statement
}
Run Code Online (Sandbox Code Playgroud)