I am facing a problem with the code below, I know how to fix it, but I would like to understand why it behaves like this.
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());
}
}
The result is shown below. Note that items inside the ArrayList are all the same.
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
To fix I have to add v = new Values()
before every 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());
}
}
Then result is:
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
Why is that? Why cant I just setValues
again?
Thanks