复制数组时for(...:...)循环的目的是什么?

时间:2015-01-26 13:15:42

标签: java arrays

当我查看教程时,我发现了这段代码..但是以下代码的一个地方我无法理解

任何人都可以描述从以下部分发生的事情

for(String old : oldArray){
    System.out.println(old);
}

这是完整的代码......

public class Main {    
    public static void main(String[] args) {

        String[] oldArray = {"one","two"};
        String[] newArray = oldArray;

        newArray[0]= "three";

        for(String old : oldArray){
            System.out.println(old);
        }

        System.out.println("");

        for(String latest : oldArray){
            System.out.println(latest);
        }

    }
}

2 个答案:

答案 0 :(得分:4)

所有这一切

for(String old : oldArray){
    System.out.println(old);
}

的作用是遍历oldArray的条目逐个打印出来。它相当于

for (int i=0; i<oldArray.length; i++) {
    System.out.println(oldArray[i]);
}

您提供的代码根本不进行任何阵列复制。

答案 1 :(得分:2)

这是Java中的for-each循环。它是迭代数组中所有元素的简短版本。

你这样做是迭代数组并打印每个元素。

我认为在这种情况下,它仅用于验证输出是否正确。

具有讽刺意味的是,代码根本不执行数组复制。

public static void main(String[] args) {

    String[] oldArray = {"one","two"};
    String[] wrongCopy = oldArray;
    String[] correctCopy = (String[]) oldArray.clone();

    for(String xi : oldArray){
        System.out.println(xi);
    }
    System.out.println("---");
    for(String xi : wrongCopy){
        System.out.println(xi);
    }
    System.out.println("---");
    for(String xi : correctCopy){
        System.out.println(xi);
    }

    System.out.println("--- after modifications ---");

    wrongCopy[0]= "three";
    oldArray[1]= "four";

    for(String xi : oldArray){
        System.out.println(xi);
    }
    System.out.println("---");
    for(String xi : wrongCopy){
        System.out.println(xi);
    }
    System.out.println("---");
    for(String xi : correctCopy){
        System.out.println(xi);
    }

}

jdoodle

正如您所看到的,如果您修改了oldArraywrongCopy的元素,它们就会显示在&#34;两者上&#34;阵列。而.clone()生成的数组的实际副本对其父项的修改不敏感。