我有一个关于将实例变量作为参数传递给正在创建的新对象的问题。在第二个类中,它似乎修改了第一个类的字段成员,这不是我想要的结果。我将发布一些代码以说明我的意思 -
private void movethePiece(int whichToMove) {
// TODO Auto-generated method stub
Mover theMover = new Mover(whichToMove, positions); // positions is an array
//and is an instance variable in the current class.
现在是类中移动器的构造函数 -
public class Mover {
private int toMove;
private int[] posArray;
private Boolean toSwap;
public Mover(int tilePiece, int[] positions) {
toMove = tilePiece;
posArray = new int[16];
posArray = positions; //assigning positions to a new variable
toSwap = false
}
这段代码修改了第一个类中的位置。如果我不想这样做,是否必须创建一个包含位置数组值的新对象,并将其传递给第一个类?我认为,由于我在移动器类中创建了一个新的int[],它会直接修改。
clone()
(在《Effective Java》中建议如此)。对于原始类型,可以使用一对new int[src.length]; System.arraycopy(...);
。对于引用类型,您需要显式地使用“复制构造函数”。 - Victor Sorokin