gpt4 book ai didi

java - 传递数组引用时,如何更改对其他数组的引用?

转载 作者:太空宇宙 更新时间:2023-11-04 13:57:36 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Is Java "pass-by-reference" or "pass-by-value"?

(92 个回答)


6年前关闭。




我正在测试这段代码。

class something {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
sth(a);
System.out.println(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}

public static void sth(int[] a){
int[] b = new int[a.length];
for (int i = 0; i < a.length; i++) {
b[i] = 0;
}

a = b;
System.out.println(a);
System.out.println(b);
}
}

预期输出:
SAME MEMORY VALUE
0 0 0 0 0

我得到了什么
[I@46d20791
[I@46d20791
[I@2c7f1f63
1 2 3 4 5

但是换线
b[i] = 0; 


a[i] = 0;

反射(reflect)了变化
[I@46d20791
[I@46d20791
[I@2c7f1f63
0 0 0 0 0

帮助我了解那里发生了什么?

最佳答案

sth当你这样做 a = b您只是在更改本地引用 a (参数)指向b ,你没有改变你的主要方法变量a的引用。

在您的主要方法中,您调用 System.out.print(a[i] + " "); ,它引用了主方法变量a (范围内唯一的 a),保持不变。

当您将代码更改为 a[i] = 0; , 本地引用 a ,参数,仍然引用主方法变量a ,所以代码按预期工作。

在不更改太多代码的情况下获得所需行为的一种方法是更改​​方法以返回所需方法方法 a 的引用。使用:

// in the method method
a = sth(a);
...

public static int[] sth(int[] a){
...
return a; // if keeping local_a_reference=b;
}

关于java - 传递数组引用时,如何更改对其他数组的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29660619/

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