传递基本数据类型参数
基本参数,如整型或双精度,通过值传递到方法。这意味着对参数值的任何更改都只存在于方法的范围内。当方法返回时,参数将消失,对它们的任何更改也将丢失。这里有个例子
public class PassPrimitiveByValue {
public static void main(String[] args) {
int x = 3;
// invoke passMethod() with
// x as argument
passMethod(x);
// print x to see if its
// value has changed
System.out.println("After invoking passMethod, x = " + x);
}
// change parameter in passMethod()
public static void passMethod(int p) {
p = 10;
}
}
当您运行这个程序时,输出是
After invoking passMethod, x = 3
传递引用数据类型参数
引用数据类型参数(如对象)也按值传递到方法中。这意味着当该方法返回时,传入的引用仍然引用与之前相同的对象。但是,如果对象的字段具有适当的访问级别,则可以在方法中更改它们的值。
例如,考虑任意类中移动圆形对象的方法:
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。该方法将circle引用的对象(即myCircle)的x和y坐标分别更改23和56。当方法返回时,这些更改将持续存在。然后给circle分配一个x = y = 0的新Circle对象的引用。但是,这种重新分配没有持久性,因为引用是按值传入的,不能更改。在该方法中,circle指向的对象发生了变化,但是,当该方法返回时,myCircle仍然引用与调用该方法之前相同的Circle对象。