Java?八種基本數(shù)據(jù)類型最新整理
一、比特(bit)和字節(jié)(Byte)
1、定義與換算關(guān)系
- 比特(bit)是計(jì)算機(jī)中
最小的數(shù)據(jù)單位
,表示二進(jìn)制的一位,只能取0
或1
。其英文縮寫為小寫字母b
(如100b) - 字節(jié)(Byte)是計(jì)算機(jī)中
基本的數(shù)據(jù)存儲(chǔ)單位
,1字節(jié)由8個(gè)比特組成,即1 Byte = 8 bit
。其縮寫為大寫字母B
(如100B)
單位 | 縮寫 | 大小 |
---|---|---|
1 字節(jié) | 1 Byte (B) | 8 bit (b) |
1 千字節(jié) | 1 KB | 1024 Bytes |
1 兆字節(jié) | 1 MB | 1024 KB |
1 吉字節(jié) | 1 GB | 1024 MB |
1 太字節(jié) | 1 TB | 1024 GB |
2、應(yīng)用場景差異
- 比特通常用于衡量網(wǎng)絡(luò)傳輸速率(如帶寬)
- 例如100Mbps(兆比特每秒)表示每秒傳輸?shù)谋忍財(cái)?shù),1兆 = 1,000,000(百萬)
- 日常十進(jìn)制換算:100Mbps寬帶的理論最高下載速度為100 ÷ 8 = 12.5 MB/s 100 ÷ 8 = 12.5 \text{MB/s}100÷8=12.5MB/s
- 使用二進(jìn)制換算:100Mbps寬帶為100 , 000 , 000 ÷ 1024 ÷ 1024 ÷ 8 ≈ 11.92 MB/s 100,000,000 ÷ 1024 ÷ 1024 ÷ 8 ≈ 11.92 \text{MB/s}100,000,000÷1024÷1024÷8≈11.92MB/s
- 字節(jié)則用于表示數(shù)據(jù)存儲(chǔ)容量或傳輸量
- 例如文件大?。ㄈ?0MB)、內(nèi)存容量等
- 下載速度也常用kB/s或MB/s表示
二、各類型詳解
1、整數(shù)類型:byte、short、int、long
- 整數(shù)字面量默認(rèn)類型為int
- 定義long類型常量須后加‘l’或‘L’后綴
- 必須加L/l:當(dāng)數(shù)值超出int范圍時(shí)
- 建議加L:即使數(shù)值在int范圍內(nèi),也推薦添加大寫L以提高代碼可讀性
- 避免使用l:防止與數(shù)字1混淆
- byte占用8個(gè)bit位,共28=256個(gè)表達(dá)方式,負(fù)數(shù)(128個(gè)):-1~-128;正數(shù)(128個(gè)):0~127
- byte和short常用于節(jié)省內(nèi)存的場景,如處理文件或網(wǎng)絡(luò)數(shù)據(jù)流
類型 | 位數(shù) | 取值范圍 | 默認(rèn)值 | 包裝類 |
---|---|---|---|---|
byte | 8 | -27 ~ 27-1(-128~127 ) | 0 | Byte |
short | 16 | -215 ~ 215-1(-32768 ~ 32767) | 0 | Short |
int | 32 | -231 ~ 231-1(約21億多 ) | 0 | Integer |
long | 64 | -263 ~ 263-1(-9223372036854775808 ~ 9223372036854775807) | 0L | Long |
不同整數(shù)類型的存儲(chǔ)空間和表示數(shù)值的范圍:
2、浮點(diǎn)類型:float、double
關(guān)于精度舉例說明:
float f = 0.123456789f; double d = 0.123456789123456789; System.out.println(f); // 輸出:0.12345679(只有前 7 位是可靠的) System.out.println(d); // 輸出:0.12345678912345678(保留了更多有效數(shù)字)
關(guān)于浮點(diǎn)型精度的說明:
- 并不是所有的小數(shù)都能可以精確的用二進(jìn)制浮點(diǎn)數(shù)表示
- 二進(jìn)制浮點(diǎn)數(shù)不能精確的表示0.1、0.01、0.001這樣10的負(fù)次冪
3、字符類型:char
- Java中的char類型是固定長度的2字節(jié),即使是中文、英文或其他字符
- 常用漢字:在Java內(nèi)存中用一個(gè)char表示,占2個(gè)字節(jié)
- 擴(kuò)展?jié)h字(生僻字):超出char表示范圍,用兩個(gè)char表示,占4個(gè)字節(jié)
- 如果你將漢字以UTF-8編碼形式存儲(chǔ)(如寫入文件或通過網(wǎng)絡(luò)傳輸),一個(gè)漢字通常會(huì)占用3個(gè)字節(jié)(生僻字可能是4個(gè)字節(jié))
類型 | 位數(shù) | 取值范圍 | 默認(rèn)值 | 包裝類 |
---|---|---|---|---|
char | 16 | 0 ~ 65535(Unicode) | ‘\u0000’ | Character |
- char類型是可以
進(jìn)行運(yùn)算
的。因?yàn)閏har類型都對(duì)應(yīng)有Unicode碼,可以看做是一個(gè)數(shù)值
char c12 = 'a'; // ASCII對(duì)應(yīng)數(shù)字97 char c13 = 65; // 這里就是ascii碼65,對(duì)應(yīng)字符A System.out.println(c12+c13); // 97+65=162
3.1、字符字面量(最常見)
最常見的寫法,表示單個(gè)字符
//使用一對(duì)''表示,內(nèi)部有且僅有一個(gè)字符 char c1 = 'a'; char c2 = '中'; char c3 = '1'; char c4 = '%'; char c5 = 'γ'; //編譯不通過 //char c6 = ''; //char c7 = 'ab';
3.2、 Unicode轉(zhuǎn)義表示(\uXXXX 格式)
- ‘使用
\u
開頭加4位十六進(jìn)制
表示Unicode編碼 - 如下unicode表,
\u + 縱坐標(biāo) + 橫坐標(biāo)
如:\u0040
表示為@
3.3、 轉(zhuǎn)義字符
- 常見控制字符,如換行、制表符等
轉(zhuǎn)義字符 | 說明 | Unicode表示方式 |
---|---|---|
\n | 換行符 | \u000a |
\t | 制表符 | \u0009 |
\" | 雙引號(hào) | \u0022 |
\' | 單引號(hào) | \u0027 |
\\ | 反斜線 | \u005c |
\b | 退格符 | \u0008 |
\r | 回車符 | \u000d |
3.4、 整數(shù)轉(zhuǎn)換
使用整數(shù)轉(zhuǎn)換為對(duì)應(yīng)的字符
char c = 65; // ASCII 碼 65 對(duì)應(yīng) 'A' System.out.println(c); // 輸出: A char ch = 0x4F60; // 十六進(jìn)制 Unicode 表示 '你' System.out.println(ch); // 輸出: 你
4、布爾類型:boolean
類型 | 位數(shù) | 取值范圍 | 默認(rèn)值 | 包裝類 |
---|---|---|---|---|
boolean | 1 | true/false | false | Boolean |
Java 語言規(guī)范未強(qiáng)制規(guī)定 boolean 的大小,僅表示其表示 1 位信息,具體實(shí)現(xiàn)由虛擬機(jī)決定
。這導(dǎo)致不同 JVM 的差異:
- 通常占用 4 字節(jié):根據(jù)《Java 虛擬機(jī)規(guī)范》,單獨(dú)使用的 boolean 值在編譯時(shí)會(huì)被轉(zhuǎn)換為int 類型(占用 4 字節(jié)),以提高 32 位處理器的存取效率。例如,局部變量或方法棧中的 boolean 變量可能按 int 處理
- 可能占用 1 字節(jié):部分虛擬機(jī)(如 HotSpot)在存儲(chǔ)對(duì)象的成員變量時(shí),可能將 boolean 字段壓縮為 1 字節(jié)。例如,Oracle 的某些 JVM 實(shí)現(xiàn)中,boolean 字段實(shí)際占用 1 字節(jié)
- 數(shù)組元素:統(tǒng)一為1 字節(jié)(編碼為 byte 數(shù)組)
三、基本數(shù)據(jù)類型轉(zhuǎn)換
1、自動(dòng)類型轉(zhuǎn)換(隱式轉(zhuǎn)換)
- 將較小的數(shù)據(jù)類型轉(zhuǎn)換為較大的數(shù)據(jù)類型(不會(huì)丟失信息)。由編譯器
自動(dòng)完成
- char與short同級(jí),但不可直接轉(zhuǎn)換,需強(qiáng)制轉(zhuǎn)換
示例:
int a = 10; long b = a; // 自動(dòng)轉(zhuǎn)換:int → long double c = b; // 自動(dòng)轉(zhuǎn)換:long → double int x = 5; double y = x + 3.14; // 結(jié)果為 double 類型 char ch = 'A'; int code = ch; // 自動(dòng)轉(zhuǎn)換:char → int(輸出 Unicode 值 65)
2、強(qiáng)制類型轉(zhuǎn)換(顯式轉(zhuǎn)換)
- 將大范圍類型轉(zhuǎn)換為小范圍類型時(shí),必須使用
強(qiáng)制類型轉(zhuǎn)換
,可能會(huì)造成精度丟失
或溢出
精度丟失示例:
double d = 123.456; int i = (int) d; // 強(qiáng)制轉(zhuǎn)換:double → int(結(jié)果為123,精度丟失)
精度溢出示例:
溢出
是指一個(gè)數(shù)值超出了該數(shù)據(jù)類型所能表示的范圍,導(dǎo)致結(jié)果不正確
甚至反方向回繞
- 想象你有一個(gè) 3 位的計(jì)數(shù)器,只能表示 0 到 999,如果你加到 1000,它就回到了 000——這就是溢出
byte b = 127; // byte 的最大值是 127 b = (byte)(b + 1); // 加1后會(huì)溢出,結(jié)果是 -128 long l = 3000000000L; int j = (int) l; // 強(qiáng)制轉(zhuǎn)換:long → int(溢出,結(jié)果為-1294967296)
3、不同數(shù)據(jù)類型運(yùn)算
byte, short, char 運(yùn)算 ? 自動(dòng)變成 int
byte a = 10; byte b = 20; // byte c = a + b; // 編譯錯(cuò)誤:結(jié)果是 int int c = a + b; // 正確 //byte、short之間做運(yùn)算 byte b3 = 12; short s1 = 10; //short s2 = b3 + s1; // 編譯不通過 需要用int來接收 int i4 = b3 + s1; // 正確
int 與 long 運(yùn)算 ? 提升為 long
int i = 1000; long l = 2000L; long result = i + l; // i 自動(dòng)轉(zhuǎn)為 long
int 與 float 運(yùn)算 ? 提升為 float
int i = 5; float f = 2.5f; float res = i + f; // i 轉(zhuǎn)為 float,結(jié)果是 7.5
float 與 double 運(yùn)算 ? 提升為 double
float f = 3.5f; double d = 1.2; double res = f + d; // f 轉(zhuǎn)為 double,結(jié)果是 4.7
到此這篇關(guān)于Java 八種基本數(shù)據(jù)類型的文章就介紹到這了,更多相關(guān)Java 八種基本數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java數(shù)據(jù)類型(八種基本數(shù)據(jù)類型+四種引用類型)以及數(shù)據(jù)類型轉(zhuǎn)換
- 八種Java中的基本數(shù)據(jù)類型詳解
- Java中的八種基本數(shù)據(jù)類型詳解
- Java基本數(shù)據(jù)類型與類型轉(zhuǎn)換實(shí)例分析
- Java基礎(chǔ)教程之八大基本數(shù)據(jù)類型
- Java的基本數(shù)據(jù)類型和運(yùn)算方法(必看篇)
- Java中八種基本數(shù)據(jù)類型的默認(rèn)值
- JAVA基礎(chǔ)之基本數(shù)據(jù)類型全面解析
- java的基本數(shù)據(jù)類型及屬性
相關(guān)文章
使用SpringBoot請(qǐng)求方式和訪問靜態(tài)頁面
SpringBoot支持多種請(qǐng)求方式,包括GET、RESTful、分頁列表等,常用框架如阿里fastjson、谷歌gson用于JavaBean序列化為Json,性能上Jackson最快,SpringBoot目錄結(jié)構(gòu)包括src/main/java、src/main/resources等2025-01-01使用Spring-Retry解決Spring Boot應(yīng)用程序中的重試問題
重試的使用場景比較多,比如調(diào)用遠(yuǎn)程服務(wù)時(shí),由于網(wǎng)絡(luò)或者服務(wù)端響應(yīng)慢導(dǎo)致調(diào)用超時(shí),此時(shí)可以多重試幾次。用定時(shí)任務(wù)也可以實(shí)現(xiàn)重試的效果,但比較麻煩,用Spring Retry的話一個(gè)注解搞定所有,感興趣的可以了解一下2023-04-04使用ByteArrayOutputStream實(shí)現(xiàn)將數(shù)據(jù)寫入本地文件
這篇文章主要介紹了使用ByteArrayOutputStream實(shí)現(xiàn)將數(shù)據(jù)寫入本地文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12淺析Java中SimpleDateFormat為什么是線程不安全的
SimpleDateFormat是Java中用于日期時(shí)間格式化的一個(gè)類,它提供了對(duì)日期的解析和格式化能力,本文主要來和大家一起探討一下SimpleDateFormat為什么是線程不安全的,感興趣的可以了解下2024-02-02Java之實(shí)現(xiàn)十進(jìn)制與十六進(jìn)制轉(zhuǎn)換案例講解
這篇文章主要介紹了Java之實(shí)現(xiàn)十進(jìn)制與十六進(jìn)制轉(zhuǎn)換案例講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Java中使用裝飾設(shè)計(jì)模式實(shí)現(xiàn)動(dòng)態(tài)增強(qiáng)對(duì)象功能
裝飾設(shè)計(jì)模式是Java中一種常用的設(shè)計(jì)模式,它通過動(dòng)態(tài)地將功能透明地附加到對(duì)象上,以擴(kuò)展對(duì)象的功能。裝飾設(shè)計(jì)模式主要應(yīng)用于需要?jiǎng)討B(tài)、透明地增強(qiáng)對(duì)象功能的場景。在Java中,裝飾設(shè)計(jì)模式可通過繼承、接口和代理等方式實(shí)現(xiàn)2023-04-04