Java ArrayList add()修改第一个条目,添加空条目

Java ArrayList add()修改第一个条目,添加空条目,java,arraylist,Java,Arraylist,已调试我的代码,所有变量均按预期显示: class1 { callingMethod() { Double[] entry = new Double[size]; while(condition) { for (i over entry) { entry[i] = Double.parseDouble(token.nextToken()); } D

已调试我的代码,所有变量均按预期显示:

class1 {

    callingMethod() {
        Double[] entry = new Double[size];

        while(condition) {
            for (i over entry) {
                entry[i] = Double.parseDouble(token.nextToken());
            }

            DataSet.addInput(entry); 
        }
    }
}


DataSet {
    private ArrayList<Double[]> inputsList;

    public DataSet (...) {

       list = new <Double[]>ArrayList();
    }

    public void addInput(Double[] anInputVector) {
        inputsList.add(anInputVector);
    }

}
class1{
调用方法(){
Double[]条目=新的Double[大小];
while(条件){
(i)超额入境{
条目[i]=Double.parseDouble(token.nextToken());
}
DataSet.addInput(条目);
}
}
}
数据集{
私有数组列表输入列表;
公共数据集(…){
列表=新的ArrayList();
}
public void addInput(双[]输入向量){
输入列表。添加(输入向量);
}
}
“entry”是每个新条目正确填充的double数组。当每个新条目添加到“列表”中时,第一个列表条目将使用新的双精度值进行修改,并添加一个空条目。结果是,第一个条目是一个双精度数组(最后添加),后面是一长串空值。
有什么想法吗

这似乎是一种共享数组对象的情况。例如:

List<double[]> list = new ArrayList<>();

double[] a = new double[] { 1.0, 2.0 };
double[] b = new double[] { 3.0, 4.0 };

// Three new's: three objects.

list.add(a);
list.add(a);
list.add(b);

a[0] = 5.0;
list.get(0)[1] = 6.0;

// list: [ [5.0, 6.0]==a, [5.0, 6.0]==a [3.0, 4.0]==b ]

这似乎是共享一个数组对象的情况。例如:

List<double[]> list = new ArrayList<>();

double[] a = new double[] { 1.0, 2.0 };
double[] b = new double[] { 3.0, 4.0 };

// Three new's: three objects.

list.add(a);
list.add(a);
list.add(b);

a[0] = 5.0;
list.get(0)[1] = 6.0;

// list: [ [5.0, 6.0]==a, [5.0, 6.0]==a [3.0, 4.0]==b ]

请张贴您的实际代码。这甚至不会编译,而且据我所知,不会产生您描述的错误行为。我添加了更多。全部代码?这是一个公平的大小,你想要全部吗?请张贴你的实际代码。这甚至不会编译,而且据我所知,不会产生您描述的错误行为。我添加了更多。全部代码?这是一个公平的大小,你想要全部吗?还是在OP的伪代码的当前迭代中,每次在
while(condition)
循环中创建一个新数组。@MattiVirkkunen是的,这可能更灵活;当一个人知道传递的数组没有被进一步使用时。@MattiVirkkunen是的,这是有效的。谢谢你和乔普。我没有意识到这一点-我想这是一个引用调用问题。@vv111y yes引用调用(正在传递的对象地址),或者每次在OP的伪代码当前迭代中的
while(condition)
循环中创建一个新数组。@MattiVirkkunen yes,这可能更灵活;当一个人知道传递的数组没有被进一步使用时。@MattiVirkkunen是的,这是有效的。谢谢你和乔普。我不知道这是一个引用调用问题。@vv111y yes引用调用(正在传递的对象地址)