Dzi*_*gas 6 java arrays performance javac
迭代(在此示例中为整数)元素数组的传统方法如下:
int[] array = {5, 10, 15};
for(int i = 0; i < array.length; i++) [
//do something with array[i]
}
Run Code Online (Sandbox Code Playgroud)
但是,这是否意味着在每次迭代后重新评估"array.length"?这样做会不会更有效率?:
int[] array = {5, 10, 15};
int noOfElements = array.length;
for(int i = 0; i < noOfElements; i++) {
//do something with array[i]
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,(据我所知)程序只需计算一次,然后查找'noOfElements'变量的值.
注意:我知道增强的for循环,但是当你想使用正在递增的变量(在这个例子中为'i')来实现for循环中的其他内容时,它不能被使用.
我怀疑这实际上是一个问题,即Java编译器是否能够意识到'array.length'没有改变,并且在计算一次后实际重用该值.
所以我的问题是:我写的第一个代码块和第二个代码块的运行时效率是否存在差异?
我从下面的回复中收集的是,当一个数组被实例化时(是正确的单词?),创建一个名为length的实例变量,它等于数组中的元素数.
这意味着语句array.length与计算无关; 它只引用实例变量.
感谢输入的人!
数组类型的成员是以下所有成员:
- 该
public final字段length,包含数组的组件数.length可能是正数或零.
调用array.length是O(1)(恒定时间操作 - 它final是数组的成员).
另请注意,正如评论中所提到的,"传统"方式不一定是您提出的方式.你可以使用for-each循环:
for(int i : array) {
...
}
Run Code Online (Sandbox Code Playgroud)