[英]how does this work? - Java code
所以我得到了這段代碼,
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
?
您將 a1 數組傳遞給fix()
,它在fix()
方法中稱為a3
,但無論如何仍然引用a1
。 因此,當您更新a3
: a3[1]=7
,您實際上更新了fix()
的參數值a1
。 因此你更新了a1
!
在行中
long a1[] = { ... };
您正在創建一個數組對象。 這將是整個程序其余部分中唯一的一個。
現在調用
fix(a1);
在此fix
方法中,將對該數組的引用分配給參數a3
。 由於此方法返回此引用( return a3;
),因此行
long[] a2 = fix(a1);
將為變量a2
分配相同的引用。 所以在所有點上,所有變量和參數都引用同一個數組。
fix
方法正在修改該數組。 因此,您擁有的所有別名都可以看到修改。
a1[]
引用作為參數傳遞給fix()
這就是為什么基本上
a1[] == a2[]
調用fix()
。
a2[]
指向a1[]
但a1[]
sum 現在是 15,所以a2[]
sum 也是 15。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.