java - 将对象添加到此数组列表时,它们都变得相同

标签 java arraylist

public void fillWith(TileEntity tile){
    for(int i = 0; i < this.height; i++){//for every x and y value
        for(int j = 0; j < this.width; j++){
            tile.x = j;
            tile.y = i;
            this.tiles.add(tile);
        }
    }
}

好的,上面的代码应该用 TileEntity 磁贴填充关卡。当我在“this.tiles.add(tile)”行之前打印出 x 和 y 坐标时,每个图 block 都有不同的坐标。但是,当我打印出 ArrayList“图 block ”中所有图 block 的 x 和 y 坐标时,每个图 block 都是 (9,9)。它们都与添加到数组列表中的最后一个图 block 相同。谢谢!

最佳答案

您不断在 for 循环中添加相同的对象。

如果您想添加不同的对象,则需要使用 new TileEntity() 创建新实例。

public void fillWith(){
    TileEntity tile;
    for(int i = 0; i < this.height; i++){//for every x and y value
        for(int j = 0; j < this.width; j++){
            tile = new TileEntity();
            tile.x = j;
            tile.y = i;
            this.tiles.add(tile);
        }
    }
}

你是对的,在你的代码示例中,每次进入循环时值都会发生变化,但是因为 tile 每次迭代都指向同一个对象,所以你只会更改 该对象内的 xy 值。 (当您更改 x 和/或 y 时,Java 不会为您创建新对象)。当您将tile添加到数组this.tiles时,它将引用您添加的对象 - 它不会复制它。

总而言之,tile 数组中的每个对象都将指向 TileEntity 的同一个实例。

关于java - 将对象添加到此数组列表时,它们都变得相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20711789/

相关文章:

java - 如何: output utf-8(kannada) characters in windows terminal using java

java - Java中数组的协方差有什么好处?

Java打印ArrayList的ArrayList

java - 在 cmd 中找不到 Psql 通过 Java 启动

java - Arrays$ArrayList 无法在 java 中转换为 java.util.ArrayList

java - 删除多个对象的数组列表下特定对象的数据

java - 将 AES 文件解密程序从 Java 重写为 C#

java - 是否可以将 int 添加到 String ArrayList 中而无需在 java 中将 int 转换为 String

java - 使用半已知键在 ArrayLists 的 HashMap 中查找最大值和最小值 - Java

java - PaintComponent() 被调用 200 次