为什么这个程序打印出“4 2 1 0”?

时间:2017-04-19 00:16:44

标签: java

有人可以解释这段代码的输出吗?我很困惑。在编译此代码之前,我认为输出是“4 1 2 3”。编译代码后,它是“4 2 1 0”。我不知道为什么所以我想知道是否有人可以向我解释一下?

public class activity1
{
public static void main(String[]args)
{
//Declare and initialize array
int []list1 = {3,2,1,4};            
int [] list2 = {1,2,3};
list2= list1;
list1[0]=0;
list1[1]=1;
list2[2]=2;
//Create for loop   
for (int i = list2.length-1; i>=0;i--)
{
System.out.print(list2[i] + " ");//print out the array
}
}
}

3 个答案:

答案 0 :(得分:2)

list2= list1;之后只有一个数组。 {3, 2, 1, 4}

然后,它被修改为{0, 1, 2, 4},然后向后打印。

答案 1 :(得分:1)

您可以自己调试并查看代码在每一行中执行的操作:

public static void main(String[] args) {
    // Declare and initialize array
    int[] list1 = {3, 2, 1, 4};
    int[] list2 = {1, 2, 3};
    list2 = list1; // list1 = [3, 2, 1, 4] list2 = [3, 2, 1, 4]
    list1[0] = 0; // list1 = [0, 2, 1, 4] list2 = [0, 2, 1, 4]
    list1[1] = 1; // list1 = [0, 1, 1, 4] list2 = [0, 1, 1, 4]
    list2[2] = 2; // list1 = [0, 1, 2, 4] list2 = [0, 1, 2, 4]

    // Create for loop
    // You are printing list2 in reverse order
    for (int i = list2.length - 1; i >= 0; i--) {
      System.out.print(list2[i] + " ");// print out the array
    }
}

答案 2 :(得分:0)

赋值只是将对list1的引用移动到list2变量中。因此,两个变量都引用相同的数组。如果要复制数组,则需要将list1中的每个项目复制到列表2中。