簡體   English   中英

Java中的數組賦值和引用

[英]Array assignment and reference in Java

public class Test {
    public static void main(String[] args) {
        int[] a = {1, 2, 3, 4, 5};
        int[] b = a;
        int[] c = {6, 7, 8};
        a = c;
        for(int i = 0; i < a.length; i ++)
            System.out.print(a[i] + " ");
        System.out.print("\n");
        for(int i = 0; i < b.length; i ++) 
            System.out.print(b[i] + " ");
        System.out.print("\n");
    }
}

我已初始化數組a並將a的引用分配給新數組b。 現在我初始化了一個新的數組c並將其引用傳遞給了數組a。 由於數組b是對數組a的引用,因此b應該具有c中的新值,但b具有舊的a值。 它背后的原因是什么? 輸出如下 -

輸出 -

6 7 8 
1 2 3 4 5

不要被名單'list'激怒。 這些圖像來自python可視化,但原理在Java中是相同的

數組a分配有一個新數組:

分配一個

陣列b被分配給后面的實例a

分配b

為數組c分配了一個新數組:

分配c

最后a被分配給c后面的實例, b沒有重新分配,仍然保留對舊a的引用:

重新分配一個

從pythontutor.com上的可視化中獲取的圖像

當您將a的值賦給b時,表示b指的是分配給數組a的相同空間。 這意味着b將獲取對數組a所做的任何更改,但是如果對變量a進行了任何更改。 如果使用a來引用新數組,則b仍將引用舊的引用。

b = a;  // b basically referring to memory used by array a
a = c;  // reference pointed by a has changed, but b is still referring the old array a

當你做b=a b引用a時。 但是,當你指定a=c a指的是c時,仍然b指的是舊對象(該對象的地址為已分配的值並且它是常量) a指定的,因為它是您分配時所包含的內容。

除非你重新分配它,否則它不會改變。

假設您將一個對象視為一個房子,並將一個參考文章視為一張紙上寫有房屋地址的文件。 abc都是引用。 所以當你說

    int[] a = {1, 2, 3, 4, 5};

你正在建造一座有1,2,3,4和5的房子; a是一張紙,上面寫着那個房子的地址。

    int[] b = a;

b是另一個參考,這意味着它是另一張紙。 但它有相同房子的地址。

    int[] c = {6, 7, 8};
    a = c;

現在我們建造一座新房子並將6,7和8放入其中。 c將是一張紙,上面寫着新房子的地址。 當我們說a = c ,那些曾經是a的紙張被拋出,我們用新房子的地址制作一張新紙。 這是新價值a

但是b是一張單獨的紙。 它沒有改變。 我們所做的一切都沒有改變它。

參考文獻就是這樣。

這就是為什么:

什么是對象引用變量?

對象有2個對象(數組)和3個引用(a,b,c)。 你只是在事物所指的地方交換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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