【问题标题】:Storing an object in a list, then making changes to the object将对象存储在列表中,然后对对象进行更改
【发布时间】:2011-04-08 10:34:41
【问题描述】:

我有一个对象,我使用theList.add(theObj) 方法将其添加到List。

如果我现在对此对象theObj 进行更改,这些更改是否会始终反映在存储在列表中的对象中?

如果是,这是否意味着java中的List只存储引用而不是它所传递对象的唯一副本?

【问题讨论】:

    标签: java list data-structures reference storage


    【解决方案1】:

    您没有在列表中存储对象。您在列表中存储了一个引用。

    是的,如果您通过 any 引用对对象进行更改,则该更改将是可见的,但是您将获得相同的对象。

    赋值、参数传递等也是如此:

    StringBuilder builder = new StringBuilder();
    StringBuilder builder2 = builder;
    
    builder.append("foo");
    System.out.println(builder2); // Prints foo
    

    这里builder 和builder2 的值是对同一个StringBuilder 对象的引用 - 因此通过builder 将字符串附加到对象中的数据后,您可以通过builder2 获得相同的信息.

    【讨论】:

    • Java Collections 框架中的所有数据结构都这样吗?
    • @Shailesh:这与 Java collections 无关——这就是 all Java 的工作方式。变量的值永远不是object;它始终是原始值或引用。
    • 谢谢。这让我很清楚。
    【解决方案2】:

    如果是,这是否意味着 List in java只存储引用而不存储 它是对象的唯一副本 通过了?

    好吧,如果您使用原语,它会创建一个副本。可能还有字符串。

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多