为什么数组元素在此代码示例中发生了变化?

时间:2016-06-13 15:28:22

标签: java arrays

我开始学习JAVA并试图理解有关数组的东西。因此,在下面的代码中,arr1的元素已分配给arr2[1],而在第二个循环中,arr2[row][col]已递增。

我只是在用调试器进行调整,并意识到arr1的内容也随着arr2[row][col]一起增加。

这可能是一个虚假的问题,但我真的无法理解,你能详细说明那里的逻辑吗?

public static void main(String[] args){

    int[] arr1 = { 1, 2, 3, 4};
    int[][] arr2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
    arr2[1] = arr1;
    for (int row = 0; row < arr2.length; row++) {
        for (int col = 0; col < arr2[row].length; col++){
            System.out.print( arr2[row][col] + " " );
            arr2[row][col]++;
        }
        System.out.println("");
    }
}

3 个答案:

答案 0 :(得分:1)

arr2 [1]是对arr1的引用 因此,当你在arr2 [1]中增加一个数字时,它也反映在arr1中。

Java对象变量是引用,因此arr2 [1]只指向与arr1相同的地址。 你可以找到很多文章:

您的代码,声明一个数组

int[] arr1 = {1, 2, 3, 4}; 

声明一个多维数组(数组数组):

int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

将arr2的第二个数组(即:arr2 [1])分配给arr1

arr2[1] = arr1; // {1, 2, 3, 4}

答案 1 :(得分:1)

这里

int[] arr1 = { 1, 2, 3, 4};
int[][] arr2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
arr2[1] = arr1;

您正在更改arr2的第二个元素作为arr1的值 所以

arr2 = { {1, 2, 3}, { 1, 2, 3, 4}, {7, 8, 9} };

是对的!

,在第二个循环中,arr2 [row] [col]递增。

是的,你增加了那些,但是该操作的结果没有被分配给任何东西,所以这些变化正在迷失......

答案 2 :(得分:0)

您正在设置 arr2 [1] 引用变量 arr1 。因此,当您修改 arr2 [1] 时,您正在修改 arr1 的值。

如果要将arr1的值设置为arr2 [1],请使用:

arr2[1] = arr1.clone();

方法克隆返回,而不是引用。

希望这会有所帮助。问候。