[英]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.