簡體   English   中英

Java中的參考文獻

[英]References in Java

我正在閱讀有關如何僅在 java 中按值傳遞的信息,並且交換兩個對象的內容的唯一方法是將 then 放入數組中...通過值傳遞對數組 object 的引用,然后使用該引用交換 0-1 數組位置。

但我對此還有一個問題:假設我創建了一個數組,例如:

List<Integer> array = new ArrayList<Integer>();
Integer a = new Integer(1);
array.add(a);

So my question is when i "add" an object to an array (in this case Integer object)...do I just store the reference to the object in the array or do I actually copy the content of the object in the array. ..

假設,假設我們在 java 中有一個“刪除引用”語句,..那么這會保留數組中 object 的值嗎?

List<Integer> array = new ArrayList<Integer>();
Integer a = new Integer(1);
array.add(a);
delete a;

那么數組仍然會保持正確的值嗎?

當您list.add()時,您只是將引用放入列表中。

java“刪除”引用的方法是不使用它,所以:

list.remove(a);
a = null;

現在它是一個孤兒,垃圾收集器將回收 memory(最終)。

只是做a = null; 對列表持有的參考和 Integer object 本身沒有影響。

注意:列表不是數組。 Arrays 是與列表(或任何其他集合)非常不同的動物。

編輯以回答提問者的更多問題

ArrayList不是array ,它是List ,其實現使用內部數組(您無權訪問)。

數組定義如下: Object[] array = new Object[5]; - 它有一個固定的大小 - 一旦它被創建,你就不能改變它的大小。 另一方面,列表可以根據需要增長(在內部,ArrayList 創建一個新的更大的數組並將其值復制到新數組中,並根據需要丟棄舊數組)。

像“復制” object 這樣的任何操作都是通過引用完成的——只復制“指針”。 在 java 中,創建真正的“深層副本”稱為“克隆”object,JDK 支持此概念 - 請參閱Clonable

假設,假設我們在 java 中有一個“刪除引用”語句,..那么這會保留數組中 object 的值嗎?

因為我們不知道這個假設的陳述在做什么,所以很難說。

您的 ArrayList 持有的是對 Integer object 的引用。 您對 object 的任何其他引用都指向完全相同的實例。

對於 Integer,這並沒有太大的區別,因為 Integer 是不可變的。

嘗試使用像 StringBuilder 這樣的可變 object 來查看效果:

List<Object> array = new ArrayList<Object>();
StringBuilder a = new StringBuilder("xxxxxx");
array.add(a);

a.setLength(0);  // clear the contents

System.out.println(array.get(0));  // will not print "xxxxxx" anymore

暫無
暫無

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

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