假设我创建了一个长度为10的整数数组,即
int[] array = new int[10];
在我的代码中的某个时刻,我想比较一个int变量的值,让我们称之为var,与数组的长度进行比较。
我想知道这段代码:
if(var == array.length) { // stuff }
和这段代码:
if(var == 10) { // stuff }
做同样的事情,也有相同的表现。
换句话说,我想知道JVM(?)用来查找数组长度的内部机制(我不说“返回”,因为length是一个字段,而不是一个方法)。它是否使用迭代?因为如果确实如此,那么第二段代码将比第一段快。
编辑:关于array.length成本的类似问题(尽管更多地关注它在for循环中的使用):
答案 0 :(得分:2)
.length
是一个属性,所以它肯定不会迭代。尽管如此,属性的值当然是在运行时获取的,这意味着第二个解决方案会更快一些(因为这是与常量的比较)。
还是第一个实现更为可取:
编辑顺便说一句,你可以自己说这是一个属性 - 通话后没有大括号。我至少不知道在java中使用属性访问的方法做额外的计算,而只是检索它的值。
答案 1 :(得分:1)
.length
是数组的属性,而不是函数。因此,结果将立即可用,无需迭代。
答案 2 :(得分:1)
来自Java Doc
数组类型的成员是以下所有成员:
公共最终字段长度,其中包含组件数 数组。长度可以是正数或零。
length是数组的最终字段,因此在编写以下代码时不需要迭代。
if(var == array.length) { // stuff }
这确实是很好的编码实践。
答案 3 :(得分:0)
数组的length属性是在常量(O(1))时间内提取的 - 不需要迭代。使用它也是一种很好的做法。