当我创建一个球的实例,然后将其复制到另一个变量时,更改原始也会更改球的副本.例如,采用下面的简化示例:
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的存取方法,但是如果我得到了球的颜色,那么它们现在都是白色的!所以我的问题是:
Ball mySecondBall = myBall;
这不会创建副本.您指定了参考.两个变量现在都引用相同的对象,这就是为什么变量对两个变量都可见的原因.
您应该做一些类似于创建new Ball相同颜色的复制:
Ball mySecondBall = new Ball(myBall.getColor());