gpt4 book ai didi

java - 数组和错误打印

转载 作者:行者123 更新时间:2023-12-01 06:34:58 25 4
gpt4 key购买 nike

当我运行这段代码时,它打印 0 , 1, 2 ,但我不知道为什么。你能解释一下吗?

public void run() {
int[] arr = new int [3];
for(int i=0; i<arr.length;i++){
arr[i]=i;
}
domore(arr);
for(int i=0; i<arr.length;i++){
println(arr[i]);
}
}

private void domore(int[] arr) {
// TODO Auto-generated method stub
int [] att = new int [3];
for(int i=0; i<att.length;i++){
att[i]=77;
}
arr=att;
}

最佳答案

在 Java 中 - “对对象的引用通过值传递”。您在 doMore() 方法中所做的任何更改都不会反射(reflect)在原始数组中,因为您正在那里重新分配传递的引用...(请使用驼峰式命名方法/字段。即,使用 doMore() 而不是 domore)。

public void run() {
int[] arr = new int [3]; // arr points to an integer array of size 3
doMore(arr);
}
private static void doMore(int[] arrNew) { // arrNew is copy of arr so it also points to the same integer array of size 3. So, any changes made by arrNew are as good as changes made by arr (and yes data of arr is changed..)
// TODO Auto-generated method stub
int [] arrNew = new int [3]; // you are making arrNew point to new integer array of size 3. So, now arrNew points to a new object and not to the one pointed by arr.
for(int i=0; i<arrNew.length;i++){
arrNew[i]=77;
}

}

关于java - 数组和错误打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21305215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com