Rob*_*ook -1 java arraylist object
有点奇怪.我正在尝试创建一个棋盘游戏(步步高)并创建了一个名为piece的对象.在我的板上,我正在尝试创建一个数组列表
ArrayList<piece> pieces = new ArrayList<piece>();
piece newPiece = new piece(1, 1, "red", "top");
piece newPiece2 = new piece(1, 2, "black", "top");
pieces.add(newPiece);
System.out.println(newPiece.getCol());
pieces.add(newPiece2);
System.out.println(newPiece2.getCol());
Run Code Online (Sandbox Code Playgroud)
我期待输出为"红色"然后"黑色",但我实际上是"黑色"然后"黑色"?有什么建议为什么会这样?
这ArrayList
是一个红鲱鱼 - 你甚至都不会再拿出碎片.只需使用以下代码,您就会看到完全相同的行为:
piece newPiece = new piece(1, 1, "red", "top");
piece newPiece2 = new piece(1, 2, "black", "top");
System.out.println(newPiece.getCol());
System.out.println(newPiece2.getCol());
Run Code Online (Sandbox Code Playgroud)
我强烈怀疑这个bug是在piece
类中 - 无论你用来存储颜色的变量是一个静态变量而不是一个实例变量.静态变量与类型相关,而不是与类型的任何特定实例相关,因此如果在构造函数中覆盖静态变量的值,则在再次获取时将始终看到该值.您希望每个实例都有不同的状态,因此您应该拥有实例变量.
(另外,你应该改进你的名字,例如Piece
代替piece
,而getColor
不是getCol
.)