我在下面的代码中遇到了一个问题,我知道如何解决它,但是我想了解为什么它的行为如此。
public void classTest() {
Values v = new Values();
ArrayList<Values> listV = new ArrayList<>();
v.setValues(3.15);
listV.add(v);
System.out.println("v1: " + v.getValue());
for (int i = 0; i < listV.size(); i++) {
System.out.println("l1: " + i + " " + listV.get(i).getValue());
}
System.out.println();
v.setValues(4.34);
listV.add(v);
System.out.println("v2: " + v.getValue());
for (int i = 0; i < listV.size(); i++) {
System.out.println("l2: " + i + " " + listV.get(i).getValue());
}
System.out.println();
v.setValues(6.87);
listV.add(v);
System.out.println("v3: " + v.getValue());
for (int i = 0; i < listV.size(); i++) {
System.out.println("l3: " + i + " " + listV.get(i).getValue());
}
}
结果如下所示。请注意,ArrayList中的项目都是相同的。
v1: 3.15
l1: 0 3.15
v2: 4.34
l2: 0 4.34
l2: 1 4.34
v3: 6.87
l3: 0 6.87
l3: 1 6.87
l3: 2 6.87
要解决此问题,我必须在每个v = new Values()
前添加setValues
。
public void classTest() {
Values v = new Values();
ArrayList<Values> listV = new ArrayList<>();
v.setValues(3.15);
listV.add(v);
System.out.println("v1: " + v.getValue());
for (int i = 0; i < listV.size(); i++) {
System.out.println("l1: " + i + " " + listV.get(i).getValue());
}
System.out.println();
v = new Values();
v.setValues(4.34);
listV.add(v);
System.out.println("v2: " + v.getValue());
for (int i = 0; i < listV.size(); i++) {
System.out.println("l2: " + i + " " + listV.get(i).getValue());
}
System.out.println();
v = new Values();
v.setValues(6.87);
listV.add(v);
System.out.println("v3: " + v.getValue());
for (int i = 0; i < listV.size(); i++) {
System.out.println("l3: " + i + " " + listV.get(i).getValue());
}
}
那么结果是:
v1: 3.15
l1: 0 3.15
v2: 4.34
l2: 0 3.15
l2: 1 4.34
v3: 6.87
l3: 0 3.15
l3: 1 4.34
l3: 2 6.87
那是为什么?为什么我不能再次setValues
?
谢谢