我正在查看一些代码,我想确保我了解对对象所做的某些更改是否实际上是对这些对象或这些对象的副本进行的。
这是一个示例:
for(int i = 0; i < myList.size(); i++)
{
DataObject myItem = (DataObject)myList.get(i);
myItem.setString("someKey", "someValue");
}
myList 是一个 DataObject 列表,因此我不确定在调用列表上的 get() 方法后将项目转换为 DataObject 的目的是什么。但我想知道编译时是如何处理的——强制转换会创建一个新对象,然后在该新对象上调用 setString() 方法而不影响列表中的对象吗?或者 myItem 引用列表中的实际项目?
谢谢。
最佳答案
转换后它仍然是对列表中项目的引用。不会创建副本。
List 返回 Object 类的类型,因此它可以用于任何类型的 Object
(因为所有类都扩展 Object
)。不过,为了调用 setString,您需要将引用类型转换为更具体的类型,以便编译器知道您正在调用它的对象类型。
使用泛型,例如List
使用列表指定类型意味着您不必强制转换,但如果您无法控制列表创建或不知道或想要限制哪些类型,则可能不适合对象可能在其中。
关于java - 我是在改变一个对象还是该对象的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385788/