2017年3月21日 星期二

[Java] 資料型態介紹 與 記憶體配置

前言:
在開始討論 Java 資料型別前大家是否有想過為什麼要有資料型別這個東西呢?
所以一開始想先給大家有『要計算前必先記憶』這個觀念,舉個例子來說:
想像自己是加油站員工,假設汽油每公升 i 元,幫一台機車加 j 公升的汽油,那總共要跟客人收 i x j 元.我們是不是會先將要計算的數字 i 與 j 記在大腦內,然後再開始計算,由此可知『要計算前必先記憶』。



相同的概念,電腦會把要計算的值先存入記憶體內,因為 i 與 j 的值是變動的,所以我們在撰寫程式時必須透過資料型別來告訴電腦所需的記憶體空間。而要記在哪邊?用什麼形式記?以及紀錄的數值要怎麼變動?這些都會跟資料型別有關,以下我們來說明。



開始正題:
Java 的資料型別主要可分為 基本資料型別參考資料型別 兩種,如下大致區分,其基本資料型別相關資料也在下圖提供。
1.基本資料型態 Primitive Type
   在Java預設八種基本的資料型態:
整數 → byte、short、int 與 long
浮點數 → float 與 double
字元 → char
      布林值 → boolean
2.參考資料型態 Reference Type
   上述8種資料型別以外都屬與參考資料型別 :
   字串(String)
自定義的類別 (class)
陣列 (Array)
介面 (interface)
列舉 (enum)
       ...


接著為了更瞭解這兩種資料型別在實際儲存與用法上的差異,我們在說明記憶體中的儲存空間配置。
  • Global
存放著宣告為 static 的類別成員變數,在 Java 程式執行期間資料會一直被維護著。成員 (屬性、方法) 宣告時若使用關鍵字 static 修飾,該成員變成屬於類別 (class) 而非物件 (object) ,因此使用 static 就不需要先建立物件。
  • Stack
存放著宣告為基本資料型別的變數內容物件變數的參考內容值的地方,當有新宣告產生時, stack 利用指標直接指向該變數,以幫助程式能快速存取該變數的內容值。
  • Heap
存放著宣告為參考資料型別,當宣告一個參考資料型別物件並用 new 關鍵字產生物件實體,物件參考值將會存在記憶體的 stack 中, 新建立的物件實體則在記憶體的 heap 中配置一塊新區域存放,同時在 stack 中的物件參考值也將會指向 heap 中的物件實體。

沒有留言:

張貼留言

[java] 條件控制

前言: 在 java 的條件控制中可分為 if-else 架構、三元運算子、switch-case 架構這三類,其中 if-else、三元運算子為條件型的判斷,條件必須為 true/false布林值;switch-case 為比對變數型的判斷,條件值比較多可以是 char、...