成員變量、局部變量、常量和靜態變量在內存中的分配

代碼如下:

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的引用相同
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章