基本數據類型:html
基本數據類型 | 大小 | 範圍 | 默認值 |
int(整形) | 32 | -2147483648~2147483648 | 0 |
long(長整形) | 64 | -9233372036854477808~9233372036854477808 | 0 |
float(浮點形) | 32 | -3.40292347E+38~3.40292347E+38 | 0.0f |
double(雙精度) | 64 | -1.79769313486231570E+308~1.79769313486231570E+308 | 0.0d |
short(短整型) | 16 | -32768~32768 | 0 |
boolean(布爾型) | 1 | true/false | false |
char(字符型) | 16 | ‘ \u0000 - u\ffff ’ | ‘\u0000 ’ |
byte(字節型) | 8 | -128~127 | 0 |
引用數據類型:程序員
類、接口類型、數組類型、枚舉類型、註解類型。數組
區別:函數
基本數據類型在被建立時,在棧上給其劃分一塊內存,將數值直接存儲在棧上。post
引用數據類型在被建立時,首先要在棧上給其引用(句柄)分配一塊內存,而對象的具體信息都存儲在堆內存上,而後由棧上面的引用指向堆中對象的地址。url
例如,有一個類Person,有屬性name,age,帶有參的構造方法,spa
Person p = new Person("zhangsan",20);htm
在內存中的具體建立過程是:對象
1.首先在棧內存中位其p分配一塊空間;blog
2.在堆內存中爲Person對象分配一塊空間,併爲其三個屬性設初值"",0;
3.根據類Person中對屬性的定義,爲該對象的兩個屬性進行賦值操做;
4.調用構造方法,爲兩個屬性賦值爲"Tom",20;(注意這個時候p與Person對象之間尚未創建聯繫);
5.將Person對象在堆內存中的地址,賦值給棧中的p;經過引用(句柄)p能夠找到堆中對象的具體信息。
相關知識:
靜態區: 保存自動全局變量和 static 變量(包括 static 全局和局部變量)。靜態區的內容在總個程序的生命週期內都存在,由編譯器在編譯的時候分配。
堆區: 通常由程序員分配釋放,由 malloc 系列函數或 new 操做符分配的內存,其生命週期由 free 或 delete 決定。在沒有釋放以前一直存在,直到程序結束,由OS釋放。其特色是使用靈活,空間比較大,但容易出錯
棧區: 由編譯器自動分配釋放,保存局部變量,棧上的內容只在函數的範圍內存在,當函數運行結束,這些內容也會自動被銷燬,其特色是效率高,但空間大小有限
文字常量區: 常量字符串就是放在這裏的。 程序結束後由系統釋放。
程序代碼區:存放函數體的二進制代碼。