代碼如下:
public class Birthday {
public static int constant = 1;//靜態邊量 類加載放在方法區內存中
public final int constant_final = 1;//常量 類加載放在方法區內存中
private int day;
private int month;
private int year;
public Birthday(int d, int m, int y) {
day = d;
month = m;
year = y;
}
// 省略get,set方法………
public static void main(String args[]) {//main方法執行,虛擬機爲其分配棧內存
int date = 9;//date局部變量,8種基礎類型,引用和值都存在棧中
Birthday d1 = new Birthday(7, 7, 1970);//d1爲對象引用,存在棧中,對象(new BirthDate())存在堆中,其中d,m,y爲局部變量存儲在棧中,
//且它們的類型爲基礎類型,因此它們的數據也存儲在棧中。day,month,year爲成員變量,它們存儲在堆中
//(new BirthDate()裏面)。當BirthDate構造方法執行完之後,d,m,y將從棧中消失。
d1.change(date);//date變量值不會變,date在棧中引用一直都沒變
}
public void change(int i) {//change方法執行,虛擬機爲其分配棧內存,把date的引用傳給i變量,i局部變量,8種基礎類型,引用存在棧中,此時沒有值
i = 1234;//此時i是重新分配1234的引用,已經不在和date的引用相同
}
}