假设我创建了一个长度为 10 的整数数组,即
int[] array = new int[10];
在我的代码中的某个时刻,我想将 int 变量(我们称之为 var)的值与数组的长度进行比较。
我想知道这段代码是否:
if(var == array.length) { // stuff }
这段代码:
if(var == 10) { // stuff }
它们做完全相同的事情,也具有相同的性能。
换句话说,我想知道 JVM(?)用来查找数组长度的内部机制(我没有说“返回”,因为长度是一个字段,而不是一个方法)。它使用迭代吗?因为如果是这样,那么第二段代码将比第一段代码更快。
编辑:关于 array.length 成本的类似问题(尽管更多地关注其在 for 循环中的使用):
最佳答案
.length
是一个属性,因此它肯定不会进行迭代。尽管如此,该属性的值自然是在运行时获取的,这意味着第二个解决方案会更快一些(因为这是与常量进行比较)。
第一个实现仍然更可取:
- 这使您的代码更易于维护
- 您只能在一个位置更改数组的长度
- 除非您每秒经历数百万次,否则您永远不会感觉到性能差异。
编辑顺便说一句,您可以自己判断这是一个属性 - 调用后没有大括号。我至少不知道java中有一种方法可以让属性访问进行额外的计算,而只是检索它的值。
关于java - Java 中的数组长度 - 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22048485/