前言
寫這一篇文章完全是因?yàn)槲以诿嬖嚨臅r(shí)候吃了一個(gè)閉門羹敛腌,希望有同樣疑問的各位能夠在一個(gè)地方找到這項(xiàng)資料,所以惫皱,我就寫下這篇文章迎瞧,方便大家也提升我的映像,總之逸吵,技不如人凶硅,只能怪自己學(xué)識(shí)不精。
Java 的8大基本類型
既然說的是 Java 8大基本類型的占用字節(jié)數(shù)扫皱,我們先來聊聊 Java 的8大基本類型
整型
- int :整數(shù)類型
- short :短整型
- long :長(zhǎng)整型
- byte :字節(jié)類型
浮點(diǎn)型
- float :浮點(diǎn)類型(單精度)
- double :浮點(diǎn)類型(雙精度)
邏輯型
- boolean :布爾型
字符型
- char :字符型
基本數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換
byte -> short
char -> int -> long
float -> double
int -> float
long -> double
** 重要的一點(diǎn):小可轉(zhuǎn)大足绅,大轉(zhuǎn)小會(huì)失去精度!:浴氢妈!**
低數(shù)據(jù)類型可以直接賦值給高數(shù)據(jù)類型,反之段多,高數(shù)據(jù)類型轉(zhuǎn)換為低數(shù)據(jù)類型必須強(qiáng)轉(zhuǎn)首量,即提前制定數(shù)據(jù)類型,例 int a = (int) 0.0F
Java 8大基本類型所占字節(jié)數(shù)(或 bit 數(shù))
類型 | 存儲(chǔ)需求 | bit 數(shù) | 取值范圍 | 備注 |
---|---|---|---|---|
int | 4字節(jié) | 4*8 | -2147483648~2147483647 | 即 (-2)的31次方 ~ (2的31次方) - 1 |
short | 2字節(jié) | 2*8 | -32768~32767 | 即 (-2)的15次方 ~ (2的15次方) - 1 |
long | 8字節(jié) | 8*8 | 即 (-2)的63次方 ~ (2的63次方) - 1 | |
byte | 1字節(jié) | 1*8 | -128~127 | 即 (-2)的7次方 ~ (2的7次方) - 1 |
float | 4字節(jié) | 4*8 | float 類型的數(shù)值有一個(gè)后綴 F(例如:3.14F) | |
double | 8字節(jié) | 8*8 | 沒有后綴 F 的浮點(diǎn)數(shù)值(例如:3.14)默認(rèn)為 double | |
boolean | 1字節(jié) | 1*8 | true进苍、false | |
char | 2字節(jié) | 2*8 | Java中加缘,只要是字符,不管是數(shù)字還是英文還是漢字觉啊,都占兩個(gè)字節(jié)拣宏。 |
至于為什么 Java 中 char 無論中英文數(shù)字都占用2字節(jié),是因?yàn)?Java 中使用 Unicode 字符杠人,所有字符均以2個(gè)字節(jié)存儲(chǔ)勋乾。
而如果需要識(shí)別字符是否為中文,可以使用正則匹配式:
String _regex = "[\\u4e00-\\u9fa5]";
補(bǔ)充
Java有一個(gè)能夠表示任意精度的算書包嗡善,通常稱為“大數(shù)值”(big number)辑莫。雖然被稱為大數(shù)值,但它并不是一種Java類型罩引,而是一個(gè)Java對(duì)象各吨。
如果基本的整數(shù)和浮點(diǎn)數(shù)精度不能夠滿足需求,那么可以使用java.math包中的兩個(gè)很有用的類:BigInteger蜒程、BigDecimal(Android SDK中也包含了java.math包以及這兩個(gè)類)這兩個(gè)類可以處理包含任意長(zhǎng)度數(shù)字序列的數(shù)值绅你。BigInteger類實(shí)現(xiàn)了任意精度的整數(shù)運(yùn)算,BigDecimal實(shí)現(xiàn)了任意精度的浮點(diǎn)數(shù)運(yùn)算昭躺。具體的用法可以參見Java API忌锯。
現(xiàn)在金融類產(chǎn)品大熱,建議金融類 App 的工程師在開發(fā)初期就直接使用 BigDecimal 數(shù)據(jù)對(duì)象來記錄金融數(shù)據(jù)领炫。