2

我刚刚在教科书中读到过,所以我想知道这是不是真的。

假设我们有一个数组,其中包含我们想要迭代的一些值:


for(int x = 0; x < array.length; x++) {
     //some code
}

现在每次它跳回到循环的开头时,它都必须重新计算数组的长度。因此,本书建议,最好创建一个该长度的整数并将 x 与该整数而不是数组长度进行比较。


for(int x = 0, int length = array.length; x < length; x++) {
     //some code
}

因此,根据我的理解,第一个版本看起来速度较慢,但​​可以节省内存,而在第二个版本中,我们使用了更多的空间来使其更快。但是我在实践中从未见过第二个版本,所以我想知道使用什么代码会更好。

提前致谢!

4

1 回答 1

7

现在每次它跳回到循环的开头时,它都必须重新计算数组的长度。

完全不真实。数组长度在 Java 中存储为数组的一部分。

文档

数组类型的成员全部如下:

  • 公共 final 字段length,其中包含数组的组件数。长度可以是正数或零。
  • public 方法clone,覆盖类中同名的方法,Object不抛出检查异常。clone数组类型的方法的返回类型T[]T[]

    多维数组的克隆是浅的,也就是说它只创建一个新数组。子数组是共享的。

  • 从类继承的所有成员Object;唯一Object不被继承的方法是它的clone方法。

还:

因此,本书建议,最好创建一个该长度的整数并x与该整数而不是数组长度进行比较。

这是一本以Java为中心的书吗?如果是这样,请立即将其扔掉并买一本新书。出现这种根本性错误是对这本书质量的一个可怕信号。

于 2013-06-19T19:13:46.380 回答