我正在查看一些代碼,並且我想確保我瞭解是否對對象所做的某些更改實際上是針對這些對象或這些對象的副本進行的。我是否在更改該對象的對象或副本?
這裏有一個例子:
for(int i = 0; i < myList.size(); i++)
{
DataObject myItem = (DataObject)myList.get(i);
myItem.setString("someKey", "someValue");
}
myList中的數據對象的名單,所以我不知道目的是調用列表的get()方法後鑄造項目的數據對象的內容。但是我想知道它在編譯時是如何處理的 - 這個強制轉換是否會創建一個新對象,然後setString()方法將在該新對象上被調用並且不會影響列表中的對象?或者是myItem引用列表中的實際項目?
謝謝。
+1關於不知道列表將在內部做什麼的非常好的觀點。這是使用不可變列表元素的另一個原因。 – biziclop 2012-02-21 22:03:54
噢,我們都假設這是一個行爲良好的List實現。但get()方法*可能會返回副本。但這不太可能。但是演員本身不會創建新的對象。好決定。 – 2012-02-21 22:05:00
好點!我應該提到,'myList'是在代碼中通過調用'DataObject'類型的對象的getList()'方法來聲明的。 – Poosh 2012-02-21 22:23:39