我正在玩一些代码,但我期待一个不同的结果。例如,如果我有一些Person对象,并且将它们添加到集合中(任意),后来又对其进行了修改(一个或多个成员),则不应认为该引用也应该在集合中进行更新( s)在何处被引用/添加?

这是我“玩”的一段代码:

public static void main(String... args) {
  Person robert = new Person("Robert", "Virding", 59);
  Person mike = new Person("Mike", "Williams", 62);
  Person joe = new Person("Joe", "Armstrong", 65);
  List<Person> persons = new LinkedList<>();

  persons.add(robert);
  persons.add(mike);
  persons.add(joe);

  Collection<Person> immutable = Collections.unmodifiableCollection(persons);

  joe = new Person("Joe", "Jonas", 35);
  System.out.printf("[robert] %s%n", robert);
  System.out.printf("[mike] %s%n", mike);
  System.out.printf("[joe] %s%n", joe);
  System.out.printf("[persons] %s%n", persons);
  System.out.printf("[immutable] %s%n", immutable);
}


我的理解是对象joe应该是Person {givenName=Joe, familyName=Jonas, age=35}而不是Person {givenName=Joe, familyName=Armstrong, age=65};但这对于集合中的引用并没有发生。

有什么建议吗?

作为记录,这是我得到的输出:

[robert] Person{givenName=Robert, familyName=Virding, age=59}
[mike] Person{givenName=Mike, familyName=Williams, age=62}
[joe] Person{givenName=Joe, familyName=Jonas, age=35}
[persons] [Person{givenName=Robert, familyName=Virding, age=59}, Person{givenName=Mike, familyName=Williams, age=62}, Person{givenName=Joe, familyName=Armstrong, age=65}]
[immutable] [Person{givenName=Robert, familyName=Virding, age=59}, Person{givenName=Mike, familyName=Williams, age=62}, Person{givenName=Joe, familyName=Armstrong, age=65}]

最佳答案

您的列表引用了对象[“ Joe”,“ Armstrong”,65],变量引用了第二个对象,即[“ Joe”,“ Jonas”,35],这是因为您创建了一个新对象并将其分配给joe。列表不保留对诸如“ joe”之类的变量的引用,而是保留对对象本身的引用。

09-30 15:06
查看更多