在 Java collections (array, LinkedList, Set) 中,当添加一个对象时,是保存引用的副本还是将整个对象复制到集合中。如果我更改原始对象,它会影响集合的对象吗?
回答1
在 java collections (Array , LinkedList , Set) 中,添加对象时是保存引用的副本还是将整个对象复制到集合中。
它保存了一个参考。它不复制对象。
这可以从 Collection.add
方法的 https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html#add-E- 中推断出来:
boolean add(E e)
确保此集合包含指定的元素。如果此集合因调用而更改,则返回 true。
请注意,它表示该集合将包含指定元素……而不是指定元素的副本。
如果我更改原始对象,它会影响集合的对象吗?
是的。它们是同一个对象。
回答2
是的,如果您更改原始对象,它确实会更改集合内的对象。
您可以在此处阅读一个类似的问题,其中谈到 java 是通过引用传递的:https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value