为什么第一个for循环在Java中失败了?
我有一个int[]a,并试图将a中的每个元素都设置为1。所以当我执行以下代码并打印每个元素时,它显示它们仍然是0为什么第一个for循环在Java中失败了?,java,arrays,for-loop,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[n
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);
for(int num=0;num这些循环在功能和操作上都不同。
第一个变量-an-给出了变量a
引用的数组中的每个元素。它不为您暴露任何要变异的内容,因此对a
的赋值对数组中的实际值没有影响
第二个循环只是遍历数组中的所有元素,但您始终直接使用数组本身,因此完全可以对值进行变异
换言之:
- 增强的for正在遍历该数组,并为您提供一个要使用的值。该值虽然最初由该数组提供,但在其他情况下与该数组没有连接。对该值所做的任何修改都不会传播到该数组
- 另一种循环是仅直接访问数组内容,在这种情况下完全可以对数组进行修改和重新分配
因此,如果您想要将数组的值设置为默认值以外的任何值,那么使用第二种方法就是最好的选择
或者……您可以使用Java 8的流API,并提出如下内容:
IntStream.iterate(1, (x) -> 1).limit(100).toArray()
这些循环在功能和操作上都不同。
第一个变量-an-给出了变量a
引用的数组中的每个元素。它不为您暴露任何要变异的内容,因此对a
的赋值对数组中的实际值没有影响
第二个循环只是遍历数组中的所有元素,但您始终直接使用数组本身,因此完全可以对值进行变异
换言之:
- 增强的for正在遍历该数组,并为您提供一个要使用的值。该值虽然最初由该数组提供,但在其他情况下与该数组没有连接。对该值所做的任何修改都不会传播到该数组
- 另一种循环是仅直接访问数组内容,在这种情况下完全可以对数组进行修改和重新分配
因此,如果您想要将数组的值设置为默认值以外的任何值,那么使用第二种方法就是最好的选择
或者……您可以使用Java 8的流API,并提出如下内容:
IntStream.iterate(1, (x) -> 1).limit(100).toArray()
第一个循环声明一个局部变量,该变量仅存在于该循环内。其值迭代数组中的每个值。临时保留一个新的内存位置并命名为“num”。更改该内存位置的内容不会修改“a”数组中的值。
第二个循环显式访问为数组“a”分配的内存并更改其内容。第一个循环声明一个仅存在于该循环内的局部变量。其值迭代数组中的每个值。临时保留一个新的内存位置,并命名为“num”。更改该内存位置的内容不会修改“a”数组中的值。
第二个循环显式访问为数组“a”分配的内存并更改其内容