我正在查看一些代码,并且我想确保我了解是否对对象所做的某些更改实际上是针对这些对象或这些对象的副本进行的。我是否在更改该对象的对象或副本?
这里有一个例子:
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