在 java 中编辑对象二维数组的字段
Editing fields of an object 2d array in java
目标是将一些 Tile 对象和自定义属性复制到二维数组中,但是我得到了意想不到的结果:
for (int i = 0; i<3; i++)
{
for (int j = 0; j<3; j++)
{
TileList[i][j] = Tiles[3];
//the goal is the overwrite the MapX and MapY fields of each element of the new Array
TileList[i][j].MapX = i;
TileList[i][j].MapY = j;
}
}
打印出每个元素的值后,每个元素的每个 MapX 和 MapY 字段都应该有自己单独的值,但是对于二维数组中的每个图块对象引用,MapX 和 MapY 都设置为 3。
您使用此语句将所有数组成员设置为同一对象:
TileList[i][j] = Tiles[3];
该语句复制对对象的引用,而不是对象本身。
在最后一次循环中,所有数组成员都指向同一个对象,这些语句将其成员设置为 3 和 3:
TileList[i][j].MapX = i;
TileList[i][j].MapY = j;
如果你想让所有的数组成员都指向不同的个对象,你可以用默认构造函数为每个对象创建一个新对象:
TileList[i][j] = new Tile();
或者复制另一个对象的构造函数:
TileList[i][j] = new Tile( myDefaultTile );
或者clone()
方法,如果你支持的话:
TileList[i][j] = myDefaultTile.clone();
顺便说一句,请注意,在 Java 中,变量名称和 class 成员的名称通常以小写字母开头。例如:
tileList[i][j].mapX = i;
目标是将一些 Tile 对象和自定义属性复制到二维数组中,但是我得到了意想不到的结果:
for (int i = 0; i<3; i++)
{
for (int j = 0; j<3; j++)
{
TileList[i][j] = Tiles[3];
//the goal is the overwrite the MapX and MapY fields of each element of the new Array
TileList[i][j].MapX = i;
TileList[i][j].MapY = j;
}
}
打印出每个元素的值后,每个元素的每个 MapX 和 MapY 字段都应该有自己单独的值,但是对于二维数组中的每个图块对象引用,MapX 和 MapY 都设置为 3。
您使用此语句将所有数组成员设置为同一对象:
TileList[i][j] = Tiles[3];
该语句复制对对象的引用,而不是对象本身。
在最后一次循环中,所有数组成员都指向同一个对象,这些语句将其成员设置为 3 和 3:
TileList[i][j].MapX = i;
TileList[i][j].MapY = j;
如果你想让所有的数组成员都指向不同的个对象,你可以用默认构造函数为每个对象创建一个新对象:
TileList[i][j] = new Tile();
或者复制另一个对象的构造函数:
TileList[i][j] = new Tile( myDefaultTile );
或者clone()
方法,如果你支持的话:
TileList[i][j] = myDefaultTile.clone();
顺便说一句,请注意,在 Java 中,变量名称和 class 成员的名称通常以小写字母开头。例如:
tileList[i][j].mapX = i;