Java數(shù)據(jù)類型的全面剖析
一、int
還記得 C 語言里的 int 嗎,C里面的 int 有著無符號(hào)與有符號(hào)之分
但是Java內(nèi)就沒有,且固定占4個(gè)字節(jié)大小,也就是32比特位
因?yàn)闆]有符號(hào)之分,所以第一位默認(rèn)是符號(hào)位
所以剩下的31位來存二進(jìn)制數(shù)據(jù)
一個(gè)int所能表示范圍就是 -2^31 -> 2^31-1
在java內(nèi),我們可以看到每個(gè)基本類型的范圍:
System.out.println(Integer.MAX_VALUE);//最大值 System.out.println(Integer.MIN_VALUE);//最小值
但是僅有21億怎么能滿足呢😎,我們需要用long來體現(xiàn)。
二、long
Java中 long 與 C語言 的區(qū)別在以下幾點(diǎn):
Java中 long 占 8字節(jié),C占 4字節(jié)
在Java中定義long類型時(shí),要在數(shù)字后加上L
long n = 10L;
小寫的L也行,但為了與1區(qū)別開來,更加醒目。
8個(gè)字節(jié)也就是64比特位,第一位符號(hào)位,范圍也就來到了驚人的-2^63 -> 2^63-1
同樣我們也可以來看看 long 的范圍:
System.out.println(Long.MAX_VALUE); System.out.println(Long.MIN_VALUE);
這個(gè)值我覺得可以滿足我們的使用了,但是小數(shù)問題呢?
三、double
來道易錯(cuò)題:
int m = 1; int n = 2; System.out.println(m / n);
此結(jié)果為0,因?yàn)槿f惡的 1.0 與 1 在編程的世界里是不一樣的。
那我這樣寫呢?
int m = 1.0; int n = 2.0; System.out.println(m / n);
這樣子系統(tǒng)會(huì)認(rèn)為1.0是8字節(jié)的double,不能存入僅有4字節(jié)的int內(nèi),于是直接報(bào)錯(cuò)。
正確寫法:
double m = 1.0; double n = 2.0; System.out.println(m / n);
讓我們?cè)倏磦€(gè)代碼:
double n = 1.2; System.out.println(n * n);
為什么在末尾會(huì)有個(gè)神奇的 '2' ?
因?yàn)?double 在內(nèi)存中的存儲(chǔ)方式遵從IEEE754標(biāo)準(zhǔn),與整數(shù)不同,存在誤差。
四、float
Java中的 float 的注意點(diǎn)主要有兩個(gè):
1. 在定義float類型變量時(shí),同 long 類型一樣,要在數(shù)字末尾加上 f 或 F, 與 double 來區(qū)分。
float n = 1.1f;
2. float 作為單精度浮點(diǎn)數(shù),只能保留小數(shù)點(diǎn)后六位的數(shù),精度較小。
五、char
在 Java 中,char 與 C的區(qū)別就很大:
1. 由于Java支持Unicode編碼,所以Java的char你甚至可以表示中文
char q = '哈'; System.out.println(q);
2. 因?yàn)槟鼙硎局形?,所以char類型占了2個(gè)字節(jié) (這也是最大的區(qū)別,要注意)
也就意味著 char 的范圍也擴(kuò)大了。
六、byte與short
這兩個(gè)都是表示整數(shù),僅是范圍不同而已。
byte 只占一個(gè)字節(jié),所以范圍僅有 -127 ~ 128
short 占兩個(gè)字節(jié),所以范圍擴(kuò)大為 -32768 -> 32767
雖然他們很小,但是省內(nèi)存??葱枨笫褂茫x自己合適的最好。
未完待續(xù)。。。
到此這篇關(guān)于Java數(shù)據(jù)類型的全面剖析的文章就介紹到這了,更多相關(guān)Java 數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
網(wǎng)易Java程序員兩輪面試 請(qǐng)問你能答對(duì)幾個(gè)?
為大家分享網(wǎng)易Java程序員兩輪面試題,考考大家,這些問題你能答對(duì)幾個(gè)?2017-11-11SpringMVC Tomcat控制臺(tái)亂碼問題解決方案
這篇文章主要介紹了SpringMVC Tomcat控制臺(tái)亂碼問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05解決@Around對(duì)靜態(tài)方法不生效的問題
這篇文章主要介紹了解決@Around對(duì)靜態(tài)方法不生效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02RestTemplate接口調(diào)用神器常見用法匯總
這篇文章主要介紹了RestTemplate接口調(diào)用神器常見用法匯總,通過案例代碼詳細(xì)介紹RestTemplate接口調(diào)用神器常見用法,需要的朋友可以參考下2022-07-07IDEA卡在”正在解析Maven依賴項(xiàng)“的解決方法
在創(chuàng)建新的SpringBoot項(xiàng)目時(shí),始終卡在"正在解析Maven依賴項(xiàng)…",本文小編給大家介紹了幾種相關(guān)的解決方案,具有一定的參考價(jià)值,需要的朋友可以參考下2023-11-11Java靜態(tài)方法和實(shí)例方法區(qū)別詳解
這篇文章主要為大家詳細(xì)介紹了Java靜態(tài)方法和實(shí)例方法的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12Java中break、continue、return語句的使用區(qū)別對(duì)比
這篇文章主要介紹了Java中break、continue、return語句的使用區(qū)別對(duì)比,本文用非常清爽簡(jiǎn)明的語言總結(jié)了這三個(gè)關(guān)鍵字的使用技巧,并用一個(gè)實(shí)例對(duì)比使用結(jié)果,需要的朋友可以參考下2015-06-06