我有一个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);
答案 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”分配的内存并更改其内容。