这是怎么回事Java代码
我有这段代码这是怎么回事Java代码,java,Java,我有这段代码 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); Sy
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
,而不是12 15
?函数fix
仅应用于long[]a2
,因此最终结果是15
?将a1[]
的引用作为参数传递给fix()
,这就是基本原因
调用fix()
后,a1[]==a2[]
a2[]
指向a1[]
但a1[]
总和现在是15,因此a2[]
总和也是15。将a1数组传递给fix()
,在fix()
方法中称为a3
,但仍然引用a1
。因此,当您更新a3
:a3[1]=7
时,您实际上更新了fix()
的参数值,它是a1
。因此,您更新了a1
排队
long a1[] = { ... };
您正在创建一个数组对象。这将是整个课程剩余部分中唯一的一个
现在,我们需要
fix(a1);
在此fix
方法中,为参数a3
指定对该数组的精确引用。当此方法返回此引用时(returna3;
),行
long[] a2 = fix(a1);
将相同的引用分配给变量a2
。所以在所有点上,所有变量和参数都引用同一个数组
fix
方法正在修改该数组。因此,您所有的别名都可以看到修改。谢谢!如果我把fix函数放在第一个println之后,最终结果是12和15,对吗?如果你放:long[]a2=fix(new long[]{3,4,5})代码>您的输出将为12 15。请更改标题以反映问题。数组为,因此更改将持续。