Java 传递数组引用时,如何将引用更改为其他数组?
我正在测试这段代码Java 传递数组引用时,如何将引用更改为其他数组?,java,reference,Java,Reference,我正在测试这段代码 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] + " ");
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);
}
}
我得到了什么
[I@46d20791
[I@46d20791
[I@2c7f1f63
1 2 3 4 5
然而,改变路线
b[i] = 0;
到
反映了对
[I@46d20791
[I@46d20791
[I@2c7f1f63
0 0 0 0 0
帮助我理解那里发生了什么?在sth中,当你做a=b时,你只是将局部引用a参数更改为指向b,而不是更改主方法变量a的引用
在main方法中,调用System.out.printa[i]+;,它只引用范围中的主方法变量a,该变量保持不变
当您将代码更改为[i]=0;,参数局部引用a仍在引用主方法变量a,因此代码按预期工作
在不更改太多代码的情况下实现所需行为的一种方法是更改方法以返回希望方法a使用的引用:
Java是按值传递的-主文件中的a和某物中的a不一样-它们刚开始只是指向同一个对象,直到你重新分配其中一个-然后它们不再指向同一个对象…@brso05你所说的正是我的意思-也许我不清楚…我会说这不是一个完全重复的对象,因为问题是如何更改这样的引用,重复问题中的答案不能提供解决方案或替代方案。这里的答案是返回引用并将传递的引用设置为同一行中的结果。其他帖子解释了这种混淆。另外一点,为了达到预期的结果,您可以做一些事情:publicstaticvoidsthint[]a{int[]b=a;}为什么代码'class something{publicstaticvoidmainstring[]args{int[]a={1,2,3,4,5};stha;System.out.printlna;forint i=0;i
a[i] = 0;
[I@46d20791
[I@46d20791
[I@2c7f1f63
0 0 0 0 0
// in the method method
a = sth(a);
...
public static int[] sth(int[] a){
...
return a; // if keeping local_a_reference=b;
}