Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数组赋值给新变量,更改原始变量会更改新变量_Java_Arrays - Fatal编程技术网

Java 将数组赋值给新变量,更改原始变量会更改新变量

Java 将数组赋值给新变量,更改原始变量会更改新变量,java,arrays,Java,Arrays,第一个System.out打印2,它应该打印,但第二个打印65。我已经用这种语言编程一年多了,据我所知,这是不应该发生的!有什么帮助吗 int[] test = {0,1,2,3,4,5}; int[] before = test; System.out.println(before[2]); test[2] = 65; System.out.println(before[2]); 上面的代码在两行上都打印9。当您执行before=test时,之前只是对测试数组

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

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

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

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


查看《Java思考》一书中的这一点,它肯定会对您有所帮助。

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


参见

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

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

通过

对于int,您是正确的,它们彼此不引用。但是,当您使用数组时,它们被视为对象,因此当您执行
before=test
时,它们在内存中指向同一个对象。

在这两种情况下,这都按预期工作。您正在为变量分配值,而变量正在打印分配给它们的值。我希望您不要混淆Java的C风格引用(int*)。我不懂C,事实上我只使用Java。谢天谢地,我在一个悠闲的项目中遇到了这个问题,而不是什么重要的事情。
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));
    }
}