参考Oracle(https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html)的Java教程,下面是一个让我完全困惑的部分的副本。有人可以善待我的外行解释吗?
例如,考虑一个移动Circle对象的任意类中的方法:
public void moveCircle(Circle circle, int deltaX, int deltaY) {
// code to move origin of circle to x+deltaX, y+deltaY
circle.setX(circle.getX() + deltaX);
circle.setY(circle.getY() + deltaY);
// code to assign a new reference to circle
circle = new Circle(0, 0);
}
让这些参数调用该方法:
moveCircle(myCircle, 23, 56)
在方法内部,circle最初是指myCircle。该方法将圆引用的对象(即myCircle)的x和y坐标分别改变23和56。
方法返回时,这些更改将保持不变。然后为circle赋予对新的Circle对象的引用,其中x = y = 0.但是,这种重新分配没有持久性,因为引用是按值传递的,不能更改。
在该方法中,圆指向的对象已更改,但是,当方法返回时,myCircle仍然引用与调用方法之前相同的Circle对象。