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硬件層面),具有高效存取的特點。