为什么第一个代码报告期望的结果而第二个代码没有报告(Java初学者)

时间:2018-08-30 14:49:25

标签: java

为什么第一个代码报告所需的结果,而第二个代码不报告(Java初学者)

public class p1 {
    public static void main(String[] args) throws IOException{
        int[] a = new int[100];
        int i = 0 ;
        for(int element1 : a){
            element1 = i++;
            System.out.println(element1);
        }
    }
}

结果0、1、2、3,......,99 第二个版本:-

public class p1 {
public static void main(String[] args) throws IOException{
    int[] a = new int[100];
    int i = 0 ;
    for(int element1 : a){
        element1 = i++;
    } 
    for(int element2 : a){
        System.out.println(element2);
    } 
}

} 结果0,0,0,0,.....,0

3 个答案:

答案 0 :(得分:2)

这是因为未更新数组:

for(int element1 : a){
    element1 = i;
    a[i++] = element1; //change array element's value to see the updated value
} 
for(int element2 : a){
    System.out.println(element2);
} 

这适用于两个代码段(均未更新数组)。

只是一个注释:在这种情况下,for循环更有意义(而不是for-each):

for(int i = 0; i < a.length; i++){
    a[i] = i; 
} 

答案 1 :(得分:1)

根据您的问题,似乎您假设更改element1将修改数组中的值。实际上并非如此。实际上发生的是,element1包含相同的值作为数组中的对应值-从某种意义上说,它是它的“副本”。因此,当您设置element1时,您要做的就是设置element1不是数组中的相应值。

答案 2 :(得分:0)

您没有为数组分配数字。在第一个示例中,这无关紧要,因为您正在打印element1,只需将其分配给特定编号即可。但在第二个示例中没有。