1

我有一个数组:

final int[] exampleArray = new int[ID_DATA_ARRAY_SIZE];

我可以通过几种方式迭代该数组,例如:

方式一:

for (int i = 0; i < exampleArray.length; i++) {
    // code where I use 'i' index
}

方式二:

for (int i = 0; i < ID_DATA_ARRAY_SIZE; i++) {
    // code where I use 'i' index
}

哪种方式更好?还有其他更好的方法吗?

4

4 回答 4

3

如果除了提取元素之外不需要i其他任何操作,那么增强的 for 循环看起来会更好一些:

for(int element : exampleArray) {
//code that uses element
}

如果您同时使用 i 来访问数组和其他东西,那么我认为方式 1 是最好的:

for (int i = 0; i < exampleArray.length; i++) {
    // code where I use 'i' index
}

原因是下次有人查看代码时,该人会立即看到您正在迭代数组的长度。如果您选择方式 2(使用常量),读者可能想知道该常量是否真的是数组的长度。

于 2013-06-12T06:14:36.220 回答
1

处理性能和代码可读性,方式 2 更好。

按性能评级,通过使用exampleArray.length您调用“成员”变量,与调用“本地”变量相比,该变量需要额外的 Java 字节码来请求。但是,性能差异非常小,除非您进行大量计算,否则您永远不会注意到它。

根据可读性评级,ID_DATA_ARRAY_SIZE 为正在阅读的人展示了您的意图,这比看起来更重要。然而,太多的程序员列出了荒谬或模棱两可的变量名,这使得阅读他们的代码缺乏自然性。以一种对我们的想法有意义的有机方式命名变量和函数,使代码在未来更容易为自己和其他任何人处理,使其成为一种好习惯。

于 2013-06-12T06:30:54.067 回答
1

我看到这两种方法的根本区别如下:

在方式 1 中:在循环条件中使用常量 exampleArray.length 在方式 2 中:在循环条件中使用常量 ID_DATA_ARRAY_SIZE

显然方式2在性能方面更胜一筹。

这是因为您正在访问一个常量而不是访问 exampleArray 对象的成员变量。在访问长度成员值的 for 循环的每次迭代中都实现了这一优势。

于 2013-06-12T06:35:48.533 回答
0

看到这完全取决于您想要以哪种方式做的个人品味,但是每当您使用数组时,最好检查数组的空值,然后做您的事情

于 2013-06-12T06:15:02.900 回答