基本型別變數和引用型別變數的實參和形參
阿新 • • 發佈:2019-01-30
傳參即是實參的值賦給形參。對於基本型別的形參,在方法內部對形參的修改只會侷限在方法內部,不會影響實參。
比如,給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
。