【问题标题】:Java - Are objects in a list held by value or reference?Java - 列表中的对象是值还是引用?
【发布时间】:2012-01-16 03:02:15
【问题描述】:

简单的问题,Java 中的列表是按值还是按引用保存对象?如果我将一个对象放在一个列表中,然后更改它的一个值,那么列表中的那个是否会有更新的值?

【问题讨论】:

  • 一个对象就是它自己。在赋值或传递给方法时,从不隐式复制/克隆/复制。

标签: java list reference


【解决方案1】:

Java 中的列表是按值还是按引用保存对象?

List 是一个包含对象引用的有序集合。

如果我将一个对象放在一个列表中,然后更改它的一个值,那么列表中的那个是否会具有更新后的值?

您只能更改/更新 可变 对象。您不能通过引用更新不可变(例如List<String>)对象。

【讨论】:

    【解决方案2】:

    是的,它们是通过引用存储的。如果要检索值,请通过实现 Cloneable 接口克隆对象并实现自己的克隆方法。

    【讨论】:

      【解决方案3】:

      Java 中的所有对象都是通过引用来帮助的。列表以引用方式保存。其中的对象是通过引用保存的。因此,如果您稍后更改值,它将显示更新的值。

      【讨论】:

        【解决方案4】:

        显然,通过引用,就像任何 Java 对象的自定义一样,除非您有意克隆该对象,并将副本放入列表中。

        【讨论】:

        • 然后是对副本的引用。
        • 当然。如果您更改 那个 项,您仍然会更改列表的内容。但是克隆和传递通常是为了留下一个副本而不做任何更改。
        • 我的意思是说“将副本放在列表中”模糊了值和引用之间的区别,这是 OP 试图弄清楚的,仅此而已。
        【解决方案5】:

        用户定义的数据类型总是通过引用传递,如果你在你的代码中定义了一个列表,其中包含一些类的变量,它们是通过引用存储的

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-27
          • 2018-09-21
          • 2013-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-21
          • 2020-04-17
          相关资源
          最近更新 更多