[英]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
當您將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
指定的,因為它是您分配時所包含的內容。
除非你重新分配它,否則它不會改變。
假設您將一個對象視為一個房子,並將一個參考文章視為一張紙上寫有房屋地址的文件。 a
, b
和c
都是引用。 所以當你說
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
是一張單獨的紙。 它沒有改變。 我們所做的一切都沒有改變它。
參考文獻就是這樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.