如何解决有人可以从我的考试中解释这个问题吗
公共类ExamPreparationDemo {
public static int[] arrayDivisionByD2(int[] numbers) {
for(int i = 0; i < numbers.length; i++)
numbers[i] = numbers[i]/2;
return numbers;
}
public static void main(String [] args){
int[] numbers = {3,8,9,10};
int[] numbers2 = arrayArrayDivisionBy2(numbers);
System.out.println(Arrays.toString(numbers));
System.out.println(Arrays.toString(numbers2));
//我的问题:运行程序时,我看到“ 1、4、4、5” “ 1、4、4、5”。 但是,为什么我的变量“数字”没有保持不变?即“ 3,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,5打印两次的原因),而不是两个单独的数组
numbers and numbers2 --> |1|4|4|5|
应该会打印出3,10和1,5
然后在答案中,创建了原始数组的克隆并通过方法进行了传递,然后对该克隆数组进行了更改
具有两个独立的数组
numbers --> |3|8|9|10|
numbers2 --> |1|4|4|5|
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。