java - 我是在改变一个对象还是该对象的副本?

标签 java arrays casting

我正在查看一些代码,我想确保我了解对对象所做的某些更改是否实际上是对这些对象或这些对象的副本进行的。

这是一个示例:

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/

相关文章:

PHP Foreach数组转表格显示

c++ - 在 C++ 中使用 istringstream 进行字符串到双重转换的意外结果

Python 套接字接收 double 据

java - 从内部存储、Android Studio (JAVA) 播放音频文件的应用程序

Java 等同于 Python 的 itertools.groupby()?

javascript - 合并两个不包含某些值的字符串数组

java - 如何修复列表中对象数组的不兼容类型

java - 如何从 List<File> 获取元素?

java - 在 Java 中,如何添加每个循环的结果?

javascript - 从数组中获取具有最低值属性的对象