我的问题是,在将对象添加到具有不同值的集合之前,是否必须重新初始化对象?
我写了一个简单的程序来强调我的意思。
为什么第一个值(Bravo,1)在下面的例子中被覆盖
s1 = new student();
被评论
学生班
public class student {
String name;
int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return this.getName() + " " + this.getId();
}
}//close student
TestStudent类
public class TestStudent {
public static void main(String args[]){
student s1 = new student();
List<student> studlist = new ArrayList<student>();
s1.setId(1);
s1.setName("Bravo");
studlist.add(s1);
//output is as expected when the below line in uncommented.
s1 = new student();
s1.setId(2);
s1.setName("charlie");
studlist.add(s1);
System.out.println( Arrays.toString(studlist.toArray()) );
}//psvm
}//end class
输出行s1 = new student();评论
[查理2,查理2]
输出行s1 = new student();未注释
[Bravo 1,charlie 2]
答案 0 :(得分:4)
您可以再次将其添加到集合中。但是,当您更改对象的值时,它们会反映到输出中,因为列表的第一个元素引用该对象。 List仅保存对象的引用,而不是对象的副本。
答案 1 :(得分:4)
请参阅,List
,Set
等集合只是保留对堆上对象的引用。因此,在您的情况下,s1
和studList's index 0
都引用相同的Student
实例。因此,通过s1
更改对象将反映在对studList.get(0)
的调用中。如果您执行s1 = new student();
,则s1
将不再指向旧的Student
实例。因此,更改它不会影响列表。
答案 2 :(得分:1)