java - Java 中的数组长度 - 性能

标签 java arrays

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

int[] array = new int[10];

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

我想知道这段代码是否:

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

这段代码:

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

它们做完全相同的事情,也具有相同的性能。

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

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

What is the Cost of Calling array.length

最佳答案

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

第一个实现仍然更可取:

  • 这使您的代码更易于维护
  • 您只能在一个位置更改数组的长度
  • 除非您每秒经历数百万次,否则您永远不会感觉到性能差异。

编辑顺便说一句,您可以自己判断这是一个属性 - 调用后没有大括号。我至少不知道java中有一种方法可以让属性访问进行额外的计算,而只是检索它的值。

关于java - Java 中的数组长度 - 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22048485/

相关文章:

arrays - typescript : Find common objects from two array using Lambda function

ruby - 是否可以使用 %w[] 速记在数组中创建一个 nil 值?

java - 关于数组初始化

javascript - 返回新形式的数组 - javascript

java - 为什么 Short.valueOf(n) 需要强制转换

java - 错误 - java 中的 "array required, but LinkedList<LLObj> found"

java - Liferay - 在用户从门户设置的时间安排作业

java - 数组如何传递给函数?

c - 如何将数组存储在 MD 数组中,并从函数返回该数组?

java - 在没有 JSP 的情况下将 JQuery 与 Servlet 一起使用有什么缺点吗?