更改一个变量会改变另一个

Rob*_*man 3 java object

当我创建一个球的实例,然后将其复制到另一个变量时,更改原始也会更改球的副本.例如,采用下面的简化示例:

class Ball() {
    Color _color;
    public Ball(Color startColor) {
        _color = startColor;
    }
    public void setColor(Color newColor) {
        _color = newColor;
    }
}
Ball myBall = new Ball(black);
Ball mySecondBall = myBall;
myBall.setColor(white);
Run Code Online (Sandbox Code Playgroud)

我已经省略了_color的存取方法,但是如果我得到了球的颜色,那么它们现在都是白色的!所以我的问题是:

  • 为什么更改一个对象会更改它的副本,以及
  • 有没有办法复制对象,以便您可以单独更改它们?

Cra*_*lus 5

Ball mySecondBall = myBall;

这不会创建副本.您指定了参考.两个变量现在都引用相同的对象,这就是为什么变量对两个变量都可见的原因.
您应该做一些类似于创建new Ball相同颜色的复制:

Ball mySecondBall = new Ball(myBall.getColor());