【问题标题】:Why are all the values in my list the same? [closed]为什么我列表中的所有值都相同? [关闭]
【发布时间】:2013-07-04 16:35:08
【问题描述】:

在 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 对象进行存储。我该如何解决这个问题?

【问题讨论】:

  • 你的意思是什么in my list is getting into a replica of last object to be added to the list ?
  • 它应该并且确实创建了一个新的 Card 对象,这里有一些不同的错误,我想这是你的观察,到底有什么问题?
  • 也许有些东西被声明为不应该是静态的......显示Card类的代码。
  • 要么您的 Card 构造函数没有按照您的预期执行,要么您区分 Card 实例之间差异的能力存在某种错误。发布相关代码,我们会看到。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多