Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java for循环中的内存管理和速度_Java_Performance_Loops_Memory - Fatal编程技术网

Java for循环中的内存管理和速度

Java for循环中的内存管理和速度,java,performance,loops,memory,Java,Performance,Loops,Memory,我刚刚在一本教科书上读到过,所以我想知道这是否是真的 比方说,我们有一个数组,其中包含一些我们想要迭代的值: for(int x=0;x

我刚刚在一本教科书上读到过,所以我想知道这是否是真的

比方说,我们有一个数组,其中包含一些我们想要迭代的值:


for(int x=0;x

现在,每次它跳回到循环的开始,它都必须重新计算数组的长度。因此,这本书建议,最好创建一个该长度的整数,并将x与该整数进行比较,而不是将数组长度进行比较


for(int x=0,int length=array.length;x

因此,根据我的理解,第一个版本看起来比较慢,但是节省了内存,而在第二个版本中,我们使用了更多的空间来加快速度。但我从未在实践中见过第二个版本,所以我想知道什么代码更适合使用

提前谢谢

现在,每次它跳回到循环的开始,它都必须重新计算数组的长度

完全不真实。数组长度作为数组的一部分存储在Java中

从:

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

  • 公共最终字段
    长度
    ,其中包含数组的组件数
    。长度可以是正或零
  • 公共方法
    clone
    ,它重写类
    对象中同名的方法,并且不抛出任何已检查的异常。数组类型
    T[]
    clone
    方法的返回类型为
    T[]

    多维数组的克隆是浅层的,也就是说它只创建一个新数组。子阵列是共享的

  • 从类
    对象继承的所有成员
    对象
    唯一没有继承的方法是它的
    克隆
    方法
此外:

因此,这本书建议,最好创建一个该长度的整数,并将
x
与该整数(而不是数组长度)进行比较


这是一本以Java为中心的书吗?如果是这样,立即扔掉它,买一本新书。出现这种根本性的错误是对书籍质量的一个可怕的信号。

使用可读性更好的(第一个),直到您能够证明性能已经成为应用程序中的一个问题。正如@Jason所说,数组将长度存储为一个公共(非计算)字段。如果那本书是关于Java的,你需要立即扔掉它。以关于Java为条件,我有足够的信息得出结论,这是一本糟糕的书。@Jason哦,伙计,30美元白白浪费了。无论如何谢谢你!如果要使用带有
size()
get(index)
的常规for循环来迭代
列表
,可能会有所帮助。尽管如此,我还是无法给出一个示例
List
实现,它具有昂贵的
size()
(可能受益于缓存)和便宜的
get(index)
。无论如何,您可能最好使用
列表迭代器。
for(int x = 0; x < array.length; x++) {
     //some code
}
for(int x = 0, int length = array.length; x < length; x++) {
     //some code
}