Java:我的新对象实例化正在更改以前的对象引用

标签 java object reference arraylist

我正在尝试弄清楚这里发生了什么,并希望得到任何帮助。我有一个循环,我在其中创建新对象,然后将它们添加到 ArrayList 中。但似乎每次循环时,新对象实际上也在更改先前创建的对象。我知道 ArrayList 实际上只包含对对象的引用,但我认为通过每次调用 new 我都会创建新实例,因此每个引用都是唯一的。

这是代码:

void copyFields()
{
    String fruitStr = "apple red,banana yellow,orange orange,pear green,grape purple";

    String[][] fruitArray = new String[5][];
    String[] fruitPairs = fruitStr.split(",");
    int r = 0;
    for (String fruitPair : fruitPairs) 
    {
        fruitArray[r++] = fruitPair.split(" ");
    }

    ArrayList<Fruit> fruitList = new ArrayList<Fruit>();
    for (String[] f : fruitArray)
    {
        Fruit fruitObj = new Fruit(f[0],f[1]);
        fruitList.add(fruitObj);
    }
}

最后,fruitList 包含 5 个对象 - 全部与 FruitArray 中的最后一个元素(葡萄紫色)相同。

您可以看到我正在尝试从包含水果/颜色对列表的字符串转换为二维数组,再转换为 Fruit 对象的 ArrayList。我可以验证每个步骤是否正常工作,直到我在调试器中观察到填充fruitList时,每次通过for循环都会更改fruitList中的所有先前对象。

我在这里缺少什么?

最佳答案

我已经测试了您的代码,它可以与经典的 Fruit 实现一起使用:

public class Fruit {
    private String name;
    private String color;

    public Fruit(String name, String color) {
        this.color = color;
        this.name = name;
    }
}

所以我认为这些字段是静态:

public class Fruit {
    private static String name;
    private static String color;

    public Fruit(String name, String color) {
        Fruit.color = color;
        Fruit.name = name;
    }
}

关于Java:我的新对象实例化正在更改以前的对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15475144/

相关文章:

java - 没有名为persistence.xml的EntityManager的持久性提供程序

java - 使用 JGit 计算文件的提交次数

java - 如何比较两个对象数组元素?

Javascript - [为什么?] 将变量分配给对象

java - 方法如何在运行时找到其对象的实例变量

退出方法时 Java 数组丢失

java - 在 Java 中将动态 JSON 解析为对象

java - 用于轻松 JSON 反序列化的 Jackson 注释

在c中的循环中创建结构体变量

Java:在方法中引用点运算符之前的对象