【发布时间】:2014-02-26 17:13:40
【问题描述】:
假设我创建了一个长度为 10 的整数数组,即
int[] array = new int[10];
在我的代码中,我想比较一个 int 变量(我们称之为 var)的值与数组的长度。
我想知道这段代码是否:
if(var == array.length) { // stuff }
还有这段代码:
if(var == 10) { // stuff }
做同样的事情,也有同样的表现。
换句话说,我想知道 JVM (?) 用于查找数组长度的内部机制(我没有说“返回”,因为长度是一个字段,而不是一个方法)。它是否利用迭代?因为如果是这样,那么第二段代码会比第一段更快。
编辑:关于 array.length 成本的类似问题(尽管更多地关注它在 for 循环中的使用):
【问题讨论】:
-
永远不要使用第二个。始终使用第一个。 Magic numbers are bad.
-
(JIT) 编译器会对此进行优化。
-
@SotiriosDelimanolis 总的来说,你是对的,但在我的代码中,这不是问题,真的。从性能的角度来看?
-
我可能弄错了,但逻辑规定当数组长度改变时该字段会更新 (;))。因此,查找数组长度不需要任何迭代,因为该字段已经包含数字。
-
@CoolBeans 我没有检查这个,因为它是关于二维数组(即一个表)。我去看看,说不定能找到什么。