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

Java—列表中的对象是按值还是按引用保存的?,java,list,reference,Java,List,Reference,简单的问题是,Java中的列表是否按值或引用保存对象?如果我将一个对象放在一个列表中,然后更改它的一个值,那么列表中的对象是否会有更新的值?显然,通过引用,就像任何Java对象的自定义一样,除非您有意克隆该对象,并将副本放在列表中。所有对象在Java中都有引用帮助。一份清单是通过引用保存的。其中的对象通过引用保存。因此,如果以后更改值,它将显示更新的值 用户定义的数据类型始终通过引用传递,如果您在代码中定义了一个包含某些类的变量的列表,则它们通过引用存储是的,它们通过引用存储。如果要检索值,请通

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

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

所有对象在Java中都有引用帮助。一份清单是通过引用保存的。其中的对象通过引用保存。因此,如果以后更改值,它将显示更新的值

用户定义的数据类型始终通过引用传递,如果您在代码中定义了一个包含某些类的变量的列表,则它们通过引用存储是的,它们通过引用存储。如果要检索值,请通过实现可克隆接口克隆对象,并实现自己的克隆方法

Java中的列表是否按值或引用保存对象

列表是包含对象引用的有序集合

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


您只能更改/更新可变对象。您不能通过不可变(例如
列表
)对象的引用来更新它们。

然后它就是对副本的引用。当然。如果您更改了该项,您仍将更改列表的内容。但克隆和传递通常是为了不做任何改变就留下一个副本。我的观点是说“一个副本放在列表中”模糊了值和引用之间的区别,这正是OP试图弄清楚的,仅此而已。对象本身就是对象。在赋值或传递给方法时,从不存在隐式复制/克隆/复制。