Java中的数组长度-性能

Java中的数组长度-性能,java,arrays,Java,Arrays,假设我创建了一个长度为10的整数数组,即 int[] array = new int[10]; 在我的代码中,我想比较int变量的值,我们称之为var,与数组的长度 我想知道这段代码是否: if(var == array.length) { // stuff } if(var == 10) { // stuff } 这段代码: if(var == array.length) { // stuff } if(var == 10) { // stuff } 做同样的事情,也有同样的表现 换

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

int[] array = new int[10];
在我的代码中,我想比较int变量的值,我们称之为var,与数组的长度

我想知道这段代码是否:

if(var == array.length) { // stuff }
if(var == 10) { // stuff }
这段代码:

if(var == array.length) { // stuff }
if(var == 10) { // stuff }
做同样的事情,也有同样的表现

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

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


.length
是数组的属性,而不是函数。因此,结果将立即可用,无需迭代。

.length
是数组的属性,而不是函数。因此,结果将立即可用,无需迭代。

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

但第一种实施方式更可取:

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

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

.length
是一个属性,所以它肯定不会进行迭代。当然,属性的值是在运行时获取的,这意味着第二个解决方案会快一点(因为这是与常量的比较)

但第一种实施方式更可取:

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

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

数组的长度属性是在常量(O(1))时间内提取的,不需要迭代。使用它也是一种很好的做法。

数组的长度属性是在恒定的(O(1))时间内提取的,不需要迭代。使用此选项也是一种很好的做法。

来自

数组类型的成员包括以下所有成员:

公共最终字段长度,其中包含组件的数量 数组的一部分。长度可以是正或零

长度是数组的最后一个字段,所以在编写以下代码时不需要迭代

if(var == array.length) { // stuff }
这确实是一种很好的编码实践。

来自

数组类型的成员包括以下所有成员:

公共最终字段长度,其中包含组件的数量 数组的一部分。长度可以是正或零

长度是数组的最后一个字段,所以在编写以下代码时不需要迭代

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


这确实是一种很好的编码实践。

永远不要使用第二种。始终使用第一个。(JIT)编译器将对此进行优化。@SotiriosDelimanolis通常你是对的,但在我的代码中,这不是一个问题,真的。从性能的角度来看?我可能弄错了,但逻辑表明,当数组的长度改变(;)时,字段会被更新。因此,数组长度的查找不需要任何迭代,因为字段已经包含该数字。@CoolBeans我没有检查它,因为它是关于二维数组(即表)的。我会看看,也许我会在那里找到一些东西。永远不要用第二个。始终使用第一个。(JIT)编译器将对此进行优化。@SotiriosDelimanolis通常你是对的,但在我的代码中,这不是一个问题,真的。从性能的角度来看?我可能弄错了,但逻辑表明,当数组的长度改变(;)时,字段会被更新。因此,数组长度的查找不需要任何迭代,因为字段已经包含该数字。@CoolBeans我没有检查它,因为它是关于二维数组(即表)的。我会看一看,也许我会在那里找到一些东西。这是我最初的想法,但我想确定一下,因为我有一些代码运行速度比预期慢得多,我想找出原因!嗯,数组。长度显然不是问题!谢谢大家!@PeterHiggs Java聊天室有没有可能提供帮助?@Jan Dvorak是的,我想我会讨论我的性能问题,以及如何在Java聊天室优化我的代码性能。@Jan Dvorak已经上传到聊天室,如果你愿意,你可以看一看:这是我最初的想法,但我想确定,因为我有一些运行速度比预期慢得多的代码,我想找出原因!嗯,数组。长度显然不是问题!谢谢大家!@PeterHiggs Java聊天室有没有可能提供帮助?@Jan Dvorak是的,我想我会讨论我的性能问题,以及如何在Java聊天室中优化代码的性能。@Jan Dvorak已经上传到聊天室,如果你愿意,你可以看一看:和+1是一个好答案,它突出了概念的所有方面!谢谢大家!@体育课