簡體   English   中英

這是如何運作的? - Java代碼

[英]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 因此,當您更新a3a3[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM