Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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
Arrays 有人能解释一下我考试中的这个问题吗_Arrays_Static - Fatal编程技术网

Arrays 有人能解释一下我考试中的这个问题吗

Arrays 有人能解释一下我考试中的这个问题吗,arrays,static,Arrays,Static,公开课考试演示{ public static int[] arrayDivisionByD2(int[] numbers) { for(int i = 0; i < numbers.length; i++) numbers[i] = numbers[i]/2; return numbers; } //我的问题:当我运行程序时,我看到“1,4,4,5” "1,4,4,5". 但是为什么我的变量“numbers”没有保持不变?即“3,8,9,10”?它们都已更

公开课考试演示{

public static int[] arrayDivisionByD2(int[] numbers) {
    for(int i = 0; i < numbers.length; i++)
        numbers[i] = numbers[i]/2;
    return numbers;
}
//我的问题:当我运行程序时,我看到“1,4,4,5” "1,4,4,5".
但是为什么我的变量“numbers”没有保持不变?即“3,8,9,10”?它们都已更改,而我只想更改“numbers2”。请提供帮助。

数组是通过引用传递的。请尝试创建克隆

        int[] numbers = {3,8,9,10};
        int[] numbers2 = numbers.clone(); //create a clone of array
        numbers2 = arrayDivisionByD2(numbers2); //passing new cloned array as param
解释

当您通过方法传递“数字”时

“参照调用”的概念开始出现

其中传递的是第一个块的地址(包含3的内存块的地址),而不是值3,8,9,10

numbers --> |3|8|9|10|
现在不管你做了什么改变,实际上都是延续下来的 原始数组

方法“arrayDivisionByD2”返回对更新数组的引用,而不是包含更新的不同数组

这意味着“数字”和“数字2”指向同一个数组(这就是为什么1,4,4,5打印两次),而不是两个单独的数组

numbers and numbers2 --> |1|4|4|5|
它会打印3,8,9,10和1,4,4,5

在回答中,创建了原始数组的克隆,并通过方法传递。然后,对该克隆数组进行更改

具有两个单独数组的结果

numbers --> |3|8|9|10| 
numbers2 --> |1|4|4|5|

简短回答:代码只创建了一个数组。对数组的引用被传递给方法,该方法修改数组的内容,并返回一个存储在另一个变量中的引用。两个变量都指向同一个数组。谢谢你的评论,你发给我的链接帮助我更好地理解了事情。问:正确吗t说数组和对象总是指向一个地址?更准确的说法可能是,它们是一个地址,指向内存中包含数据的位置。该地址可以传递、复制等。但是,如果只创建了一个对象/数组,那么就只存在一个。谢谢你的评论,但我的目标是I don’我不明白为什么他们都打印了相同的内容。不是怎么做,而是无论如何都要感谢。希望这个小小的解释能有所帮助!!!是的,我开始明白了,谢谢!
numbers --> |3|8|9|10| 
numbers2 --> |1|4|4|5|