Java中的数组长度 - 性能

时间:2014-02-26 17:13:41

标签: java arrays

假设我创建了一个长度为10的整数数组,即

int[] array = new int[10];

在我的代码中的某个时刻,我想比较一个int变量的值,让我们称之为var,与数组的长度进行比较。

我想知道这段代码:

if(var == array.length) { // stuff }

和这段代码:

if(var == 10) { // stuff }

做同样的事情,也有相同的表现。

换句话说,我想知道JVM(?)用来查找数组长度的内部机制(我不说“返回”,因为length是一个字段,而不是一个方法)。它是否使用迭代?因为如果确实如此,那么第二段代码将比第一段快。

编辑:关于array.length成本的类似问题(尽管更多地关注它在for循环中的使用):

What is the Cost of Calling array.length

4 个答案:

答案 0 :(得分:2)

.length是一个属性,所以它肯定不会迭代。尽管如此,属性的值当然是在运行时获取的,这意味着第二个解决方案会更快一些(因为这是与常量的比较)。

还是第一个实现更为可取:

  • 这使您的代码更易于维护
  • 您只能在一个地方更改数组的长度
  • 你永远不会感受到性能上的差异,除非你在一秒钟内通过数百万次传递它。

编辑顺便说一句,你可以自己说这是一个属性 - 通话后没有大括号。我至少不知道在java中使用属性访问的方法做额外的计算,而只是检索它的值。

答案 1 :(得分:1)

.length是数组的属性,而不是函数。因此,结果将立即可用,无需迭代。

答案 2 :(得分:1)

来自Java Doc

数组类型的成员是以下所有成员:

  

公共最终字段长度,其中包含组件数   数组。长度可以是正数或零。

length是数组的最终字段,因此在编写以下代码时不需要迭代。

if(var == array.length) { // stuff }

这确实是很好的编码实践。

答案 3 :(得分:0)

数组的length属性是在常量(O(1))时间内提取的 - 不需要迭代。使用它也是一种很好的做法。