传参即是实参的值赋给形参。对于基本类型的形参,在方法内部对形参的修改只会局限在方法内部,不会影响实参。
比如,给Calculator
增加一个increase(int)
方法:
class Calculator {
public int add(int a, int b) {
return a + b;
}
public int increase(int a) {
return ++a;
}
public static void main(String args[]) {
Calculator calculator = new Calculator();
int x = 10;
int y = calculator.increase(x);
System.out.println(x);
}
}
increase(int a)
方法定义了一个int
形参a
,将x
作为实参传入,虽然方法内部做了自增操作,但是并不会改变x
的值。因此,打印出来的x
的值是10
而不是11
。
引用类型的实参传入方法中时,是将对象的引用传入,而非对象本身。因此,在方法执行时,实参和形参会引用到同一个对象。
在方法结束时,形参占据的内存虽然会被释放,但是通过形参对对象进行的修改则不会丢失,因为对象依然保存在堆中。
例如,Car
的构造器中如果对engine
进行修改:
public Car(int color, int speed, Engine engine) {
this.color = color;
this.speed = speed;
engine.power = 200; // 这里讲engine的power赋值为200
this.engine = engine;
}
则在main
方法中执行如下代码
Engine myEngine = new Engine(180)
Car myCar = new Car(0xffffff, 100, myEngine);
System.out.println(myEngine.power);
在Car myCar = new Car(0xffffff, 100, myEngine);
这行代码中,我们将myEngine
作为实参传递给了Car
的构造器,由于构造器中的engine
形参此时和myEngine
指向同一个对象,因此执行完构造器后,myEngine
的power
值会从180
变成200
。