为什么第一个for循环在Java中失败?

时间:2015-12-06 04:49:52

标签: java arrays for-loop

我有一个int [] a,并尝试将a中的每个元素设置为1.因此,当我执行下面的代码并打印每个元素时,它显示它们仍为0。

        for(int num:a) 
              num=1;

但如果我在下面尝试,现在每个元素都是1。我糊涂了。我一直认为2 for循环具有相同的功能。谁能告诉我为什么我的第一次尝试失败了?为什么它在我打印时有效?感谢~~~

        for(int num=0;num<a.length;num++) 
            a[num]=1;
        for(int n:a)
            System.out.println(n);

2 个答案:

答案 0 :(得分:3)

这些循环不同。功能和操作。

第一个 - enhanced-for loop - 通过变量a为数组引用提供每个元素。 暴露任何让你变异的内容,因此a的赋值对数组中的实际值没有影响。

第二个循环只是遍历数组中的所有元素,但是直接始终使用数组本身,因此完全可以改变值。

用其他术语表示:

  • 增强型for将通过数组,并为您提供值。该值虽然最初由 数组提供,否则无法将连接到数组。对该值所做的任何修改都不会传播到数组。

  • 替代循环只是直接访问数组内容,完全可以对数组进行修改和重新分配。

因此,如果您想将数组的值设置为除默认值以外的任何值,那么使用第二种方法就可以了。

或者......你可以使用Java 8的Stream API并提出类似的结果:

IntStream.iterate(1, (x) -> 1).limit(100).toArray()

答案 1 :(得分:3)

您的第一个循环声明一个仅存在于该循环内的局部变量。它的值迭代数组中的每个值。暂时保留一个新的内存位置,并给出名称“num”。更改该内存位置的内容不会修改“a”数组中的值 您的第二个循环显式访问为数组“a”分配的内存并更改其内容。