有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java向ArrayList添加新元素会导致覆盖所有以前插入的项的属性

我在下面的代码片段中遇到了一个问题,其中创建了元素数组,并填充了随后创建的项。输出显示特定元素是引擎类的不同实例(如预期),但在中表示为的属性值(属于引擎输入类型)取自最后创建的元素并复制(引用?)和之前的一样。 我在网上做了研究,发现这种行为的主要原因是:

  1. 多次使用同一对象

  1. 实例化具有静态字段的类的对象。就我所见,以上原因都不适用于这里(在所使用的类中,唯一的静态字段代表记录器)

有人知道为什么中的属性被复制到数组tasks的所有元素吗

片段

List<Engine> tasks = new ArrayList<>();
    for (int i = 0; i < segs.size(); i++) {
        Segment s = new Segment(segs.get(i));
        EngineInput in = new EngineInput(new Store(store), s);
        Engine ce = new Engine(in); 
        tasks.add(i, ce);
        log.debug("-------");
    // After completing the i-th step we print a reference of each element of the 
    //"tasks" array together with a reference of its property "in"
        for (int j = 0; j < i; j++) {
            log.debug("\t\tj = " + j +   " CE : " + tasks.get(j) + 
                        " --> IN : " + tasks.get(j).getIn() );
        }
    }

输出

请注意,引用foo.calcs.EngineInput@填充在数组的所有元素上(为什么??)

[DEBUG] 2016-10-17 23:32:11.706 [main] Optimizer -      j = 0 CE : foo.calcs.Engine@34414ffc --> IN : foo.calcs.EngineInput@1903b5d
[DEBUG] 2016-10-17 23:32:11.792 [main] Optimizer - -------
[DEBUG] 2016-10-17 23:32:11.793 [main] Optimizer -      j = 0 CE : foo.calcs.Engine@34414ffc --> IN : foo.calcs.EngineInput@4041739c
[DEBUG] 2016-10-17 23:32:11.793 [main] Optimizer -      j = 1 CE : foo.calcs.Engine@5cff6b74 --> IN : foo.calcs.EngineInput@4041739c
[DEBUG] 2016-10-17 23:32:11.879 [main] Optimizer - -------
[DEBUG] 2016-10-17 23:32:11.880 [main] Optimizer -      j = 0 CE : foo.calcs.Engine@34414ffc --> IN : foo.calcs.EngineInput@627ff1b8
[DEBUG] 2016-10-17 23:32:11.881 [main] Optimizer -      j = 1 CE : foo.calcs.Engine@5cff6b74 --> IN : foo.calcs.EngineInput@627ff1b8
[DEBUG] 2016-10-17 23:32:11.881 [main] Optimizer -      j = 2 CE : foo.calcs.Engine@62b57479 --> IN : foo.calcs.EngineInput@627ff1b8
[DEBUG] 2016-10-17 23:32:11.981 [main] Optimizer - -------
[DEBUG] 2016-10-17 23:32:11.982 [main] Optimizer -      j = 0 CE : foo.calcs.Engine@34414ffc --> IN : foo.calcs.EngineInput@29a33620
[DEBUG] 2016-10-17 23:32:11.982 [main] Optimizer -      j = 1 CE : foo.calcs.Engine@5cff6b74 --> IN : foo.calcs.EngineInput@29a33620
[DEBUG] 2016-10-17 23:32:11.982 [main] Optimizer -      j = 2 CE : foo.calcs.Engine@62b57479 --> IN : foo.calcs.EngineInput@29a33620
[DEBUG] 2016-10-17 23:32:11.982 [main] Optimizer -      j = 3 CE : foo.calcs.Engine@ea04cab --> IN : foo.calcs.EngineInput@29a33620
[DEBUG] 2016-10-17 23:32:12.082 [main] Optimizer - -------

共 (0) 个答案