在数组上调用.length与保存大小变量的性能是否存在差异?

我正在创建一个模拟程序,我希望代码得到非常优化。 现在我有一个数组循环通过我使用的各种for循环

for(int i = 0; i<array.length; i++){ //do stuff with the array } 

我想知道如果我在类中保存一个变量来指定这个数组长度会更快,并使用它。 或者如果它重要的话。

访问数组上的length属性的速度和它一样快。

您会看到人们建议您在进入循环之前保存数据结构大小,因为这意味着每个迭代都需要一个方法。

但这种微观优化很少发生。 在您有数据告诉您这是性能问题的原因之前,不要太担心这种事情。

你应该花更多的时间考虑你在这个循环中嵌入的算法,可能的并行性等等。这对你寻求优化的解决方案更有意义。

它真的没关系,当你使用[#]创建一个数组时,它会存储该数字,然后返回它。

如果您正在使用[] {object1,object2,object3},那么它将计算大小,在任何一种情况下,该值仅计算一次并存储。

length是一个变量,而不是一个方法,当你访问它时它有一个值,它只是检索那个值,它不像每次你使用length属性时计算数组的长度。 array.length并不慢,事实上,必须设置一个额外的变量实际上需要更多的时间,然后只使用长度。

array.length更快,虽然是几分之一毫秒,但在循环中这样你可以节省大量的时间,如果循环让我们说1,000,000项(可能是0.1秒)。

它不太可能有所作为。

更广泛的问题是您希望模拟尽可能快地运行。 这个sourceforge项目展示了如何使用正在运行的程序来告诉你要优化什么,而不是想知道像.length这样的小事情。 大多数代码,首先编写(除了小玩具程序),具有巨大的加速潜力,以避免被猜测的方式。

加速的最大机会通常是分散的 ,就像您选择的数据结构一样。 它们没有本地化到特定的例程,测量工具也没有指出它们。 在该项目中演示的方法,随机暂停,确实识别它们。 您需要做出的改变可能并不容易,但它们会产生加速。