(java)将项目添加到ArrayList中会生成重复的项目

时间:2018-09-19 18:03:05

标签: java

我在下面的代码中遇到了一个问题,我知道如何解决它,但是我想了解为什么它的行为如此。

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

谢谢

0 个答案:

没有答案