【问题标题】:Storing same object in different arrays将相同的对象存储在不同的数组中
【发布时间】:2014-03-06 04:22:21
【问题描述】:

对于以下代码:

User myUser = new User();
User[] array1 = new User[10];
User[] array2 = new User[10];
array1[5] = myUser;
array2[5] = myUser;

对象 myUser 是存储了两次,还是每个对象上只存储了对象的地址?

如果我开始弄乱以下变量,这仍然成立:

temp = myUser;
array2[4] = temp;

另外,如果我对一个数组中的 myUser 进行更改,是否会更改另一个数组?

编辑:最后一个问题如何通过值而不是引用来存储它?

【问题讨论】:

标签: java arrays object reference


【解决方案1】:

是的,只有对User 对象的引用存储在数组中。每个引用都指向同一个对象。通过任一数组修改对象都会修改同一个对象。

这同样适用于将引用存储在第二个示例中的变量中。

只有primitive types 按值存储,例如intbooleanchar。请注意,它们也有相应的引用类型,例如对于int,你有Integer

【讨论】:

  • 太好了,所以它只存储了一次。最后一个问题是如何避免这种情况,以免发生这种情况。 IE。它是按值存储的
  • 唯一按值存储的东西(在数组和集合中)是原语:整数、布尔值、字符等。
  • 您需要创建对象的深层副本以避免它。
  • @YahyaUddin 您必须手动创建对象的深层副本;具体取决于对象中数据的确切性质。典型的技术包括定义一个构造函数,该构造函数接受对象的另一个实例并复制其值,和/或覆盖Object.clone()
  • @JasonC 我认为你的评论在某种程度上增强了我的评论。
猜你喜欢
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 2021-08-14
  • 2013-10-17
  • 1970-01-01
相关资源
最近更新 更多