将数组分配给新变量,更改原始更改新的变量

时间:2011-05-09 03:27:07

标签: java arrays

int[] test = {0,1,2,3,4,5};
    int[] before = test;
    System.out.println(before[2]);
    test[2] = 65;
    System.out.println(before[2]);

第一个System.out打印 2 它应该,但第二个打印 65 。我用这种语言编程了一年多,据我所知,这不应该发生!有什么帮助吗?

    int first = 9;
    int second = first;
    System.out.println(second);
    first = 10;
    System.out.println(second);

上面的代码在两行上打印 9

4 个答案:

答案 0 :(得分:3)

执行before = test;时,之前只是对test数组的引用,已创建新数组并将其分配给test。因此,当您查看before[i]的值时,您基本上会查看test[i]的值,反之亦然。 before只是test的别名。这就是为什么在第二次印刷中你得到65。

Thinking in Java 一书中查看此text,它一定会对您有帮助。

答案 1 :(得分:1)

为什么不期望这种情况发生。您只需两个变量分配给同一个数组,然后将该数组的索引#2 指定为65,因此,下次打印时应该得到65什么是索引#2。

请参阅http://download.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

上的示例

答案 2 :(得分:0)

这是正常行为。如果要复制数组,则需要复制它。

class ArrayCopyDemo {
    public static void main(String[] args) {
        char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
                'i', 'n', 'a', 't', 'e', 'd' };
        char[] copyTo = new char[7];

        System.arraycopy(copyFrom, 2, copyTo, 0, 7);
        System.out.println(new String(copyTo));
    }
}

通过http://download.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

答案 3 :(得分:0)

对于int,你是对的,他们不互相引用。但是当你使用数组时,它们被认为是对象,所以当你执行before = test时,在内存中它们指向同一个对象。