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