【发布时间】:2015-06-30 23:49:38
【问题描述】:
我可能试图提高效率,但我一直想知道以下两个代码示例中哪一个会执行得更快。
假设您有一个对包含ArrayList 或Strings 的对象的引用,并且您想要遍历该列表。以下哪项更有效(即使只是勉强有效)?
for(String s : foo.getStringList())
System.out.println(s);
或者
ArrayList<String> stringArray = foo.getStringList();
for(String s : stringArray)
System.out.println(s);
如您所见,第二个循环初始化对列表的引用,而不是像第一个示例那样在每次迭代时都调用它。除非这个概念是完全不正确的,并且它们都以相同的方式运行,因为 Java 的内部工作方式创建了它们自己的引用变量。
所以我的问题是,它是什么?
【问题讨论】:
-
我不得不回想起 CS 课程。我认为它们将是等效的。您应该能够通过在调试器中运行程序来观察这一点。变量列表中应该有对从
foo.getStringList()返回的对象的某种引用 -
我总是选择第一个选项,因为第二个代码的 stringArray 范围很广。我更喜欢尽可能缩小范围。
-
@Jimmy 但如果您不再使用相同的变量名并且其他类将继续保留列表,那么范围是否重要?
-
因为即使在第一个循环中也会临时保留引用,所以首先从方法堆栈中弹出的将是代码示例 1 上的引用保留,而不是示例 2。除了那个,真的没关系。
标签: java performance for-loop