gpt4 book ai didi

java - 将对象添加到通用列表

转载 作者:行者123 更新时间:2023-12-01 16:56:52 26 4
gpt4 key购买 nike

您好,我正在尝试添加具有不同属性设置的相同对象。但是当迭代列表时,它给了我最新添加的设置。

正如您在下面看到的,是我的代码。

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com