Java:将内容从一个变量移动到另一个变量

Java: Move content from one variable to another

我目前正在使用 Java 开发国际象棋游戏,我遇到了一个问题。棋盘的每个区域都可能有一个棋子,你可以输入:

field.getPiece() //null or Piece-object

现在,当移动一个 Piece 时,我想这样做:

field2.setPiece( field1.getPiece() );
field1.setPiece( null );

问题是,field1保留了片段的引用,并用null覆盖了它,所以片段被删除了。所以我的问题是:如何将一个变量的内容/引用移动到另一个变量,而不将两个变量指向同一个引用?

顺便说一句:我知道,我可以克隆我的 Piece,然后删除旧的,但我希望有更有效的方法来做到这一点。

编辑: 相关代码:

public class Field {
    private Piece piece;

    public Piece getPiece(){ return piece; }

    public void setPiece(Piece piece){
        this.piece = piece;
        piece.setField(this);                //Tell the piece on what field it is (to get position etc.) [LINE 53]
    }
}

public abstract class Piece {
    protected Field field;
    public void setField(Field field){
        this.field = field;
    }
}  

field2.setPiece(field1.getPiece());
field1.setPiece(null);

错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void [...].Piece.setField(Field)' on a null object reference
at [...].Field.setPiece(Field.java:53)

删除代码中的最后一行 (field1.setPiece(null);) 时,它有效(不会崩溃)

EDIT2: 收到答案后,我意识到,我上面的想法是完全错误的,错误是由一个简单的问题引起的...

问题出在 setPiece 方法中的 piece.setField(this); 行。当你设置一块 null 时,你如何在 null 对象上调用 setField。

所以只需在`piece.setField(this);.

之前放置一个空检查

您在 Field#setPiece 方法中得到 NullPointerException,因为您尝试在片段为 null 时调用 piece.setField(this)。所以像这样重写代码

public void setPiece(Piece piece){
    this.piece = piece;
    if (piece != null) {
        piece.setField(this);
    }
}