本文重點介紹創建物件和使用物件的記憶體分配問題,我盡量用簡單的方法幫助大家理解new語法背后的記憶體邏輯,
我們來先介紹兩個概念:
- 堆疊記憶體:位于通用RAM(隨機訪問存盤器)中,程式通過堆疊指標可以直接獲取到存盤在堆疊記憶體中的資料,運行效率僅次于暫存器,
- 堆記憶體:一種通用的記憶體池(也位于RAM區),用于存放所有的Java物件,運行速度要比堆疊記憶體花費更多的時間,
概念是抽象的,不是很好理解,接下來通過一個具體的小案例,來揭開記憶體分配的神秘面紗,假如我們要設計一個圖書管理系統,因此需要創建一個圖書類
public class Book {
String bookName; //書名
Integer price; //價格
public void lendBook(){
System.out.println("借書成員方法");
}
}
1、單個物件記憶體圖
當我們使用new創建一個物件時,記憶體中會進行如下3步操作:
1)使用new創建物件,在堆記憶體中申請Book類的記憶體空間
2)堆疊記憶體中存放類在堆記憶體的首地址
3)變數就是堆疊記憶體地址的別名
我們借助一小段代碼,來展示記憶體變化邏輯,請看下圖
2、多個物件指向同一記憶體
由于堆疊記憶體和堆記憶體的原理不同,接下來對比一下,變數賦值與物件賦值之間的區別

當b=a;book1=book;之后分別修改b和book1的值,觀察a和book的變化,

運行結果截圖

/******************************************************************************************
* 需要Java學習資料和專案外包資訊的小伙伴,可以關注我的公眾號【碼農充電站】或者聯系我的微信
* 公眾號:碼農充電站
* 作者微信:it1529577
*****************************************************************************************/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/273706.html
標籤:java
