gpt4 book ai didi

Java 错误或功能?

转载 作者:行者123 更新时间:2023-11-30 06:00:45 25 4
gpt4 key购买 nike

好的,这是代码,然后讨论如下:

public class FlatArrayList {

private static ArrayList<TestWrapperObject> probModel = new ArrayList<TestWrapperObject>();

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

int [] currentRow = new int[10];

int counter = 0;

while (true) {

for (int i = 0; i < 10; i++) {
currentRow[i] = probModel.size();
}

TestWrapperObject currentWO = new TestWrapperObject(currentRow);

probModel.add(counter, currentWO);

TestWrapperObject testWO = probModel.get(counter);
// System.out.println(testWO);

counter++;

if (probModel.size() == 10) break;

}

// Output the whole ArrayList
for (TestWrapperObject wo:probModel) {
int [] currentTestRow = wo.getCurrentRow();
}
}
}

public class TestWrapperObject {

private int [] currentRow;

public void setCurrentRow(int [] currentRow) {
this.currentRow = currentRow;
}

public int [] getCurrentRow() {
return this.currentRow;
}

public TestWrapperObject(int [] currentRow) {
this.currentRow = currentRow;
}

}

上面的代码是做什么的?我想做的是将数组加载为某个包装对象(在我们的例子中为 TestWrapperObject)的成员。当我脱离循环时,probModel ArrayList 具有应有的元素数量,但所有元素的最后一个元素的值相同(大小为 10 的数组,每个项目等于 9)。循环内的情况并非如此。如果您使用原始 int 值执行相同的“实验”,则一切正常。我自己是否遗漏了一些关于数组作为对象成员的内容?或者我刚刚遇到了 Java bug?我正在使用 Java 6。

最佳答案

您仅创建 currentRow 数组的一个实例。将其移至行循环内,它的行为应该更像您所期望的。

具体来说,setCurrentRow 中的赋值不会创建对象的副本,而仅分配引用。因此,包装对象的每个副本都将保存对同一 int[] 数组的引用。更改该数组中的值将使持有对同一数组实例的引用的所有其他包装对象的值看起来发生变化。

关于Java 错误或功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/478006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com