Java數據類型

目錄

一、Java的數據類型與內存的關係

二、Java的數據類型在內存中的存儲:

三、基本數據類型:

四、引用數據類型:

五、區別:

六、相關知識:

七、例如:


一、Java的數據類型與內存的關係

數據類型在計算機語言裏面,是對內存位置的一個抽象表達方式,可以理解爲針對內存的一種抽象的表達方式。

在Java中,每個存放數據的變量都是有類型的,如:

char ch; float x; int a,b,c; 

ch是字符型的,就會分配到2個字節內存。不同類型的變量在內存中分配的字節數不同,同時存儲方式也是不同的。

所以給變量賦值前需要先確定變量的類型,確定了變量的類型,即確定了數據需分配內存空間的大小,數據在內存的存儲方式

二、Java的數據類型在內存中的存儲

1)基本數據類型的存儲原理:所有的簡單數據類型不存在“引用”的概念,基本數據類型都是直接存儲在內存中的內存棧上的,數據本身的值就是存儲在棧空間裏面,而Java語言裏面八種數據類型是這種存儲模型;

2)引用類型的存儲原理:引用類型繼承於Object類(也是引用類型)都是按照Java裏面存儲對象的內存模型來進行數據存儲的,使用Java內存堆和內存棧來進行這種類型的數據存儲,簡單地講,“引用”是存儲在有序的內存棧上的,而對象本身的值存儲在內存堆上的;

三、基本數據類型:

byte:Java中最小的數據類型,在內存中佔8位(bit),即1個字節,取值範圍-128~127,默認值0

short:短整型,在內存中佔16位,即2個字節,取值範圍-32768~32767,默認值0

int:整型,用於存儲整數,在內在中佔32位,即4個字節,取值範圍-2147483648~2147483647,默認值0

long:長整型,在內存中佔64位,即8個字節,取值範圍-2^63~2^63-1,默認值0L

float:浮點型,在內存中佔32位,即4個字節,用於存儲帶小數點的數字(與double的區別在於float類型有效小數點只有6~7位),默認值0

double:雙精度浮點型,用於存儲帶有小數點的數字,在內存中佔64位,即8個字節,默認值0

char:字符型,用於存儲單個字符,佔16位,即2個字節,取值範圍0~65535,默認值爲空

boolean:布爾類型,佔1個字節,用於判斷真或假(僅有兩個值,即true、false),默認值false

四、引用數據類型:

類、接口類型、數組類型、枚舉類型、註解類型。

五、區別:

基本數據類型在被創建時,在上給其劃分一塊內存,將數值直接存儲在棧上。

引用數據類型在被創建時,首先要在棧上給其引用(句柄)分配一塊內存,而對象的具體信息都存儲在堆內存上,然後由棧上面的引用指向堆中對象的地址。

引用類型的內存單元中只存放對象的地址,而對象本身存貯在內存堆中,只是簡單的引用對象的地址。

六、相關知識:

靜態區: 保存自動全局變量和 static 變量(包括 static 全局和局部變量)。靜態區的內容在總個程序的生命週期內都存在,由編譯器在編譯的時候分配。

堆區:  一般由程序員分配釋放,由 malloc 系列函數或 new 操作符分配的內存,其生命週期由 free 或 delete 決定。在沒有釋放之前一直存在,直到程序結束,由OS釋放。其特點是使用靈活,空間比較大,但容易出錯

棧區: 由編譯器自動分配釋放,保存局部變量,棧上的內容只在函數的範圍內存在,當函數運行結束,這些內容也會自動被銷燬,其特點是效率高,但空間大小有限

引用和指針的區別:指針是一個實體,而引用僅是個別名

七、例如:

有一個類Person,有屬性name,age,帶有參的構造方法,

Person p = new Person("zhangsan",20);

內存中的具體創建過程是:

1.首先在棧內存中位其p分配一塊空間;

2.在堆內存中爲Person對象分配一塊空間,併爲其兩個屬性設初值: "",0;

3.根據類Person中對屬性的定義,爲該對象的兩個屬性進行賦值操作;

4.調用構造方法,爲兩個屬性賦值爲"Tom",20;(注意這個時候p與Person對象之間還沒有建立聯繫);

5.將Person對象在堆內存中的地址,賦值給棧中的p;通過引用(句柄)p可以找到堆中對象的具體信息

 

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