2.Java基本數據類型問題

Java基本數據類型

Java基本數據類型

Char的總結

在設計之初的時候被用來存儲字符,可是世界上有那麼多字符,如果有1個字節,那麼就意味着只能存儲256中,顯然不合適,而如果有兩個字節,那麼就可以存儲65536種。這個數量符合大多數國家的語言字符的個數。於是Java團隊默認使用unicode作爲編碼,一個char作爲2個字節來存儲。
  這裏就有兩個問題了?
    1. java的char一定會有兩個字節嗎?
    2. 中文字符可以存儲在char裏面嗎?
  先來回答第一個問題。char一定是兩個字節嗎?不是的,這個跟我們選用的字符編碼有關,如果採用”ISO-8859-1”編碼,那麼一個char只會有一個字節。如果採用”UTF-8”或者“GB2312”、“GBK”等編碼格式呢?這幾種編碼格式採用的是動態長度的,如果是英文字符,大家都是一個字節。如果是中文,”UTF-8”是三個字節,而”GBK”和”GB2312”是兩個字節。而對於”unicode”而言,無論如何都是兩個字節。
  然後再回答第二個問題,對於一個char如果用”ISO-8859-1”來存儲的話,肯定無法存儲一箇中文,而對於”UTF-8”、“GB2312”、“GBK”而言大多數中文字符是可以存儲的。

布爾boolean的總結

在《Java虛擬機規範》一書中的描述:“雖然定義了boolean這種數據類型,但是隻對它提供了非常有限的支持。在Java虛擬機中沒有任何供boolean值專用的字節碼指令,Java語言表達式所操作的boolean值,在編譯之後都使用Java虛擬機中的int數據類型來代替,而boolean數組將會被編碼成Java虛擬機的byte數組,每個元素boolean元素佔8位”。這樣我們可以得出boolean類型佔了單獨使用是4個字節,在數組中又是1個字節。
那虛擬機爲什麼要用int來代替boolean呢?爲什麼不用byte或short,這樣不是更節省內存空間嗎。大多數人都會很自然的這樣去想,我同樣也有這個疑問,經過查閱資料發現,使用int的原因是,對於當下32位的處理器(CPU)來說,一次處理數據是32位(這裏不是指的是32/64位系統,而是指CPU硬件層面),具有高效存取的特點。

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