前言
寫這一篇文章完全是因為我在面試的時候吃了一個閉門羹,希望有同樣疑問的各位能夠在一個地方找到這項資料,所以,我就寫下這篇文章,方便大家也提升我的映像,總之,技不如人,只能怪自己學識不精。
Java 的8大基本類型
既然說的是 Java 8大基本類型的占用字節數,我們先來聊聊 Java 的8大基本類型
整型
- int :整數類型
- short :短整型
- long :長整型
- byte :字節類型
浮點型
- float :浮點類型(單精度)
- double :浮點類型(雙精度)
邏輯型
- boolean :布爾型
字符型
- char :字符型
基本數據類型自動轉換
byte -> short
char -> int -> long
float -> double
int -> float
long -> double
** 重要的一點:小可轉大,大轉小會失去精度?。。?*
低數據類型可以直接賦值給高數據類型,反之,高數據類型轉換為低數據類型必須強轉,即提前制定數據類型,例 int a = (int) 0.0F
Java 8大基本類型所占字節數(或 bit 數)
類型 | 存儲需求 | bit 數 | 取值范圍 | 備注 |
---|---|---|---|---|
int | 4字節 | 4*8 | -2147483648~2147483647 | 即 (-2)的31次方 ~ (2的31次方) - 1 |
short | 2字節 | 2*8 | -32768~32767 | 即 (-2)的15次方 ~ (2的15次方) - 1 |
long | 8字節 | 8*8 | 即 (-2)的63次方 ~ (2的63次方) - 1 | |
byte | 1字節 | 1*8 | -128~127 | 即 (-2)的7次方 ~ (2的7次方) - 1 |
float | 4字節 | 4*8 | float 類型的數值有一個后綴 F(例如:3.14F) | |
double | 8字節 | 8*8 | 沒有后綴 F 的浮點數值(例如:3.14)默認為 double | |
boolean | 1字節 | 1*8 | true、false | |
char | 2字節 | 2*8 | Java中,只要是字符,不管是數字還是英文還是漢字,都占兩個字節。 |
至于為什么 Java 中 char 無論中英文數字都占用2字節,是因為 Java 中使用 Unicode 字符,所有字符均以2個字節存儲。
而如果需要識別字符是否為中文,可以使用正則匹配式:
String _regex = "[\\u4e00-\\u9fa5]";
補充
Java有一個能夠表示任意精度的算書包,通常稱為“大數值”(big number)。雖然被稱為大數值,但它并不是一種Java類型,而是一個Java對象。
如果基本的整數和浮點數精度不能夠滿足需求,那么可以使用java.math包中的兩個很有用的類:BigInteger、BigDecimal(Android SDK中也包含了java.math包以及這兩個類)這兩個類可以處理包含任意長度數字序列的數值。BigInteger類實現了任意精度的整數運算,BigDecimal實現了任意精度的浮點數運算。具體的用法可以參見Java API。
現在金融類產品大熱,建議金融類 App 的工程師在開發初期就直接使用 BigDecimal 數據對象來記錄金融數據。