所以我有这段代码,
package test1;
class Student13
{
public static void main(String [] args)
{
Student13 p = new Student13();
p.start();
}
void start()
{
long [] a1 = {3,4,5};
long [] a2 = fix(a1);
System.out.print(a1[0] + a1[1] + a1[2] + " ");
System.out.println(a2[0] + a2[1] + a2[2]);
}
long [] fix(long [] a3)
{
a3[1] = 7;
return a3;
}
}
你能告诉我为什么它会返回15 15
而不是12 15
吗?功能fix
仅适用于long[] a2
,那么最终结果是15 15
怎么样?
答案 0 :(得分:1)
您将a1数组传递给fix()
,在a3
方法中称为fix()
,但无论如何仍然引用a1
。因此,当您更新a3
:a3[1]=7
时,实际上会更新fix()
的参数值a1
。因此,您更新了a1
!
答案 1 :(得分:1)
在第
行long a1[] = { ... };
您正在创建一个数组对象。这将是该计划其余部分中唯一的一个。
现在打电话给
fix(a1);
将此数组的引用准确地分配给此a3
方法中的参数fix
。由于此方法返回此引用(return a3;
),行
long[] a2 = fix(a1);
将为变量a2
分配相同的引用。所以在所有点上,所有变量和参数都引用相同的数组。
fix
方法正在修改该数组。因此,您所拥有的所有别名都可以看到。
答案 2 :(得分:0)
a1[]
的引用作为参数传递给fix()
,这就是为什么基本上
a1[] == a2[]
后 fix()
。
a2[]
指向a1[]
,但a1[]
总和现在为15,因此a2[]
总和也是15。