您好,我正在尝试添加具有不同属性设置的相同对象。但是当迭代列表时,它给了我最新添加的设置。
正如您在下面看到的,是我的代码。
List<TestObject> list = new ArrayList<TestObject>();
TestObject t= new TestObject();
t.setEmail("John1989@gmail.com");
list.add(t);
System.out.println(list.get(0).getEmail());
t.setEmail("The_lawyer99yahoo.com");
list.add(t);
System.out.println(list.get(1).getEmail());
for(TestObject s : list)
{
System.out.println(s.getEmail());
}
输出:
John1989@gmail.com
The_lawyer99yahoo.com
The_lawyer99yahoo.com
The_lawyer99yahoo.com
我的疑问是为什么 iteretor 给出最新添加的对象设置(电子邮件)但是当我执行此语句时 System.out.println(list.get(0).getEmail());
它工作正常
为什么for
循环不断返回最近添加的对象?
提前致谢。
最佳答案
您不是在创建新对象,而只是更改内存中同一对象的属性。 List
允许您多次添加 Object
的同一个实例,因此它“看起来”就像您添加了多个对象,而实际上,它只是一堆指向同一个对象的元素。使用某种 Set
来代替,你会发现你只有一个对象;)
您需要为每个新条目创建一个 TestObject
的新实例,例如...
List<TestObject> list = new ArrayList<TestObject>();
TestObject t= new TestObject();
t.setEmail("John1989@gmail.com");
list.add(t);
System.out.println(list.get(0).getEmail());
t= new TestObject();
t.setEmail("The_lawyer99yahoo.com");
list.add(t);
System.out.println(list.get(1).getEmail());
for(TestObject s : list)
{
System.out.println(s.getEmail());
}
这样,属性就与每个条目的 TestObject
的不同实例相关联
关于java - 将对象添加到通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31531238/