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

为什么第一个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

我有一个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);

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”分配的内存并更改其内容