簡體   English   中英

兩個數組之間的相等性

[英]equality between two arrays

我有這段代碼,我想知道為什么當 (a) 數組更改時,另一個將更改兩個是因為指針?

Boolean[] a= {false,false};
Boolean[] b = {false,false};
a = b;
a[0] = true;
b[1] = true;

System.out.println(a[0] +" "+ b[0]);
System.out.println(a[1] +" "+ b[1]);

輸出:

true true
true true

設置a = b兩者都指向相同的數據。 因此,如果你改變一個,你就會改變另一個。 它們本質上是一回事。

沒有特定於數組。 這就是對象分配在 Java 中的工作方式。
您為變量a分配與此處的變量b相同的引用:

a = b;

所以ab變量在這個語句之后引用同一個對象。

要使ab引用兩個不同的對象,您必須復制它們的值。
對於 Boolean (immutable) 數組:進行淺拷貝的clone()方法是一種方法。

a = b.clone();

簡短的回答,是的,因為指針

您首先創建兩個數組並給它們兩個指針 a 和 b,每個數組一個。 當您執行 a=b 時,您的 'a' 指針具有相同的 b 值,因此它們都指向第二個數組,因此 a 和 b 現在是同一回事。

這也意味着您不能再更改第一個數組,因為沒有指針指向它,並且應該釋放數組內存

它的原因是指針。 變量 a 和 b 指向相同的位置,因為

a = b;

在此代碼之后,a 指向與 b 相同的內存地址。 所有的變化和結果都是一樣的。

暫無
暫無

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

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