为什么列表中的所有值都相同?

时间:2013-07-06 23:48:26

标签: java arraylist pass-by-reference pass-by-value

在java中,我试图用一堆不同的对象填充列表。但是发生的事情是,每次我将另一个对象添加到列表中时,列表中的所有对象都变成了相同的东西。

有问题的代码:

private static ArrayList<Card> deck = new ArrayList<Card>();

private static void setupDeck(){ 
    for(int i = 0; i < suits; i++){
        for(int j = 0; j < cards; j++){
            deck.add(new Card(i,j));
        }   

    }

}

何时

deck.add(new Card(i,j));

被调用永远对象已经在我的列表中变成了最后一个对象的副本以添加到列表中。我知道我通过引用传递对象,但我不明白为什么。不应该是我的宣言

new Card(i,j)

创建一个新的Card对象进行存储。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你似乎过度使用“静态”。如果字段声明为static,则该类的所有实例共享相同的副本,因此具有相同的值。检查您在Card类中查看的字段是否被声明为“静态”,如果是,则将其删除。