Java有關對象的堆內存和棧內存淺析

Java有關對象的堆內存和棧內存淺析

對象內存分析:

  • 堆內存:保存的是對象具體信息,在程序之中堆內存空間是通過new來開闢的
  • 棧內存:保存的是一塊堆內存的地址

這是一段學習過程中我思考的代碼,理解了這個代碼差不多就能理解這個堆內存和棧內存的概念

class Person{
	int age;
	String name;
	Person(int age,String name){
		this.age=age;
		this.name=name;
	}
	public void tell(){
		System.out.println(name+":"+age);
	}
}

public class demo {
	public static void main(String[] args) {
		Person per1=new Person(18, "Mark");//初始化per1 age:18 name:Mark
		Person per2=per1;//初始化per2 age:per1.age=18 name:per1.name="Mark"
		per2.age=80; //
		per1.name="Jack";
		per1.tell();
		per2.tell();
	}
}

聲明per1的時候的語句是 Person per1=new Person(18, “Mark”);
採用的new關鍵字,開闢了一塊新的堆內存空間
如下圖所示
在這裏插入圖片描述
而聲明per2沒有用到new關鍵字,沒有開闢新的堆內存空間,直接指向的per1的堆內存地址
如下圖所示
在這裏插入圖片描述
而後對per2的age屬性值進行了新的賦值per2.age=80,對per1的name也進行了新的賦值per1.name=“Jack”
但是,因爲per2和per1的內存地址指向同一個人,就好比per1的家變成了per1和per2的家後,per1對家裏牆進行了改變,per2對家裏的傢俱進行了更換,最終,他們都不是單獨改變的,是把他們共有的進行了改變
如下圖所示
在這裏插入圖片描述
所以最終控制檯打印的結果如下:
在這裏插入圖片描述
最後:簡單闡述,不足希望能夠指出。

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