- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- java基礎詳解之數據類(lèi)型知識點(diǎn)總結
int a = Integer.MAX_VALUE;//int最大值 int b = Integer.MIN_VALUE;//int最小值
在java中int占4個(gè)字節,和操作系統每任何關(guān)系。這也是java的可移植性。
int 能表示的范圍為-231~231-1,如果超出最大值或者小于最小值則會(huì )發(fā)生溢出。
public static void main(String[] args) { int a = Integer.MAX_VALUE;//int最大值 int b = Integer.MIN_VALUE;//int最小值 System.out.println("MAX_VALUE="+a); System.out.println("MIN_VALUE="+b); a = a+1; b = b-1; System.out.println("---------------"); System.out.println("MAX_VALUE+1="+a); System.out.println("MIN_VALUE-1="+b); }
我們發(fā)現int的最大值加1會(huì )等于int的最小值,而int的最小值減1會(huì )等于int的最大值。這種情況不僅在int,在long和short都存在
long占8個(gè)字節,可表示的范圍是 -263~-263-1
long a = 100L; long b = 100l; long c = 100;
在創(chuàng )建長(cháng)整形變量時(shí),a,b,c三種都可以,當我們一般用第一種,大寫(xiě)L更好識別它時(shí)長(cháng)整形
short占2個(gè)字節,所能表示的范圍為-215~215-1
short能表示的范圍 -32768~32767 ,所表示的范圍比較小一般不推薦使用,所以我們以后 int 和 long 時(shí)使用的比較多的。
public static void main(String[] args) { int a1 = 1; int a2 = 2; double b1 = 1.0; double b2 = 2.0; System.out.println("a1/a2="+a1/a2); System.out.println("b1/b2="+b1/b2); }
在java當中int除以 int 只能得到 int 類(lèi)型,因為小數部分會(huì )被舍去。如果要得到小數則需要用浮點(diǎn)數來(lái)計算。
再來(lái)看一個(gè)有意思的代碼
public static void main(String[] args) { double a = 1.1; System.out.println(a*a); }
這里a*a理論上說(shuō)時(shí)等于1.21的但這里為什么不是呢?
1.Java 中的 double 雖然也是 8 個(gè)字節, 但是浮點(diǎn)數的內存布局和整數差別很大, 不能單純的用 2n 的形式表示數據范
2.Java 的 double 類(lèi)型的內存布局遵守 IEEE 754 標準(和C語(yǔ)言一樣), 嘗試使用有限的內存空間表示可能無(wú)限的小數, 勢
必會(huì )存在一定的精度誤差圍,而且計算機中小數是沒(méi)有精確的數字的
flaot占4個(gè)字節
public static void main(String[] args) { float a1 = 1.1; float a2 = (float)1.1; float b = 1.1F; float c = 1.1f; }
這里為什么報錯呢?因為Java是一個(gè)強類(lèi)型語(yǔ)言,安全性更高。在Java當中小數默認是double類(lèi)型的,在創(chuàng )建float變量的時(shí)候,需要在小數后面加上一個(gè)F(f)或者強制類(lèi)型轉換。
不過(guò)float能表示的精度較小,所以我們一般都是用double
在java中char不同于C語(yǔ)言它是占兩個(gè)字節的,計算機中的字符本質(zhì)上是一個(gè)整數. 在 C 語(yǔ)言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一個(gè)字符占用兩個(gè)字節, 表示的字符種類(lèi)更多, 包括中文.
public static void main(String[] args) { char a = 97; char b = 65; char c = '好'; System.out.println(a); System.out.println(b); System.out.println(c); }
在Java當中字符類(lèi)型就是字符類(lèi)型不要和數字掛鉤,記住java中字符類(lèi)型是不能夠給負數的。
byte占1個(gè)字節,能表示的范圍為 -128~127
byte不能賦值超過(guò)它范圍外的數字,從而可以推到出其它類(lèi)型也是一樣的。
來(lái)看一段代碼:
這里的 b3和b5都報錯,而b4沒(méi)有報錯呢?
1.這是因為執行 b3 這段代碼時(shí),b1和b2都是變量編譯器不知道里面是什么,為了安全起見(jiàn)所以報錯。
2.而b4不報錯時(shí)因為在編譯的時(shí)候 5+10就已經(jīng)被替換為15了,相當于 b4 = 15.
3.那b5報錯又是為什么呢?這里就牽扯到了整形提升,
簡(jiǎn)單說(shuō)一下整形提升:當變量小于4個(gè)字節的時(shí)候,比如這里的byte在計算時(shí)會(huì )把它先提升為整形int再進(jìn)行計算。而byte是1個(gè)字節接收不了int類(lèi)型的變量,所以報錯。后面會(huì )再提到整形提升
boolean a = false; boolean b = true;
1.在java中布爾類(lèi)型只有兩個(gè)取值 false 和 true 。
2.java中的boolean和int 類(lèi)型不能相互轉換,不存在1表示true ,0表示false這種用法
3.boolean 類(lèi)型有些 JVM 的實(shí)現是占 1 個(gè)字節, 有些是占 1 個(gè)比特位。并沒(méi)有明確規定大小
Java的字符串可以用+進(jìn)行拼接
public static void main(String[] args) { String str1 = "這是一個(gè)字符串"; String str2 = "java"; String tmp = str1 + str2; System.out.println(tmp); }
同樣也可以拼接數字
public static void main(String[] args) { String str1 = "這是一個(gè)字符串"; String str2 = "java"; String tmp = str1 + str2; System.out.println(tmp); int a = 10; int b = 20; System.out.println(tmp+a+b); System.out.println(a+b+tmp); }
輸出的時(shí)候如果前面是字符串則后面的數字會(huì )被當作字符進(jìn)行拼接,可以根據自己的需要進(jìn)行運算或者拼接
1.Java 使用 雙引號 + 若干字符 的方式表示字符串字面值.
2. 和上面的類(lèi)型不同, String 不是基本類(lèi)型, 而是引用類(lèi)型(在以后的文章會(huì )說(shuō)到).
上面討論的都是各種規則的變量, 每種類(lèi)型的變量也對應著(zhù)一種相同類(lèi)型的常量.
常量指的是運行時(shí)類(lèi)型不能發(fā)生改變.
常量主要有以下兩種體現形式
final修飾的常量是不能被直接修改的
java 作為一個(gè)強類(lèi)型編程語(yǔ)言, 當不同類(lèi)型之間的變量相互賦值的時(shí)候, 會(huì )有教嚴格的校驗.來(lái)看一下列子
long 表示的范圍更大, 可以將 int 賦值給 long, 但是不能將 long 賦值給 int.
double 表示的范圍更大, 可以將 int 賦值給 double, 但是不能將 double 賦值給 int.
結論: 不同數字類(lèi)型的變量之間賦值, 表示范圍更小的類(lèi)型能隱式轉換成范圍較大的類(lèi)型, 反之則不行.
結論: 使用 (類(lèi)型) 的方式可以將 double 類(lèi)型強制轉成 int. 但是
1.強制類(lèi)型轉換可能會(huì )導致精度丟失. 如剛才的例子中, 賦值之后, 20.5 就變成 20 了, 小數點(diǎn)后面的部分被忽略.
2.強制類(lèi)型轉換不是一定能成功, 互不相干的類(lèi)型之間無(wú)法強轉
比如這個(gè)列子 int 和 boolean這兩種完全不相關(guān)的類(lèi)型是不可以強轉的。
類(lèi)型轉換小結:
1. 不同數字類(lèi)型的變量之間賦值, 表示范圍更小的類(lèi)型能隱式轉換成范圍較大的類(lèi)型.
2. 如果需要把范圍大的類(lèi)型賦值給范圍小的, 需要強制類(lèi)型轉換, 但是可能精度丟失.
3. 將一個(gè)字面值常量進(jìn)行賦值的時(shí)候, Java 會(huì )自動(dòng)針對數字范圍進(jìn)行檢查.
結論: 當 int 和 long 混合運算的時(shí)候, int 會(huì )提升成 long, 得到的結果仍然是 long 類(lèi)型, 需要使用 long 類(lèi)型的變量來(lái)
接收結果. 如果非要用 int 來(lái)接收結果, 就需要使用強制類(lèi)型轉換.
再來(lái)看一個(gè)例子,前面在byte類(lèi)型的時(shí)候就已經(jīng)說(shuō)到了,這里再詳細說(shuō)一下。
結論: byte 和 byte 都是相同類(lèi)型, 但是出現編譯報錯. 原因是, 雖然 a 和 b 都是 byte, 但是計算 a + b 會(huì )先將 a 和 b 都提升成 int, 再進(jìn)行計算, 得到的結果也是 int, 這時(shí)賦給 c, 就會(huì )出現上述錯誤。
由于計算機的 CPU 通常是按照 4 個(gè)字節為單位從內存中讀寫(xiě)數據. 為了硬件上實(shí)現方便, 諸如 byte 和 short 這種低于4 個(gè)字節的類(lèi)型, 會(huì )先提升成 int, 再參與計算。
簡(jiǎn)單來(lái)說(shuō)類(lèi)型提升就是為了加快cpu運算速度
如果非要這樣計算,則需要強轉。
類(lèi)型提升小結:
1.不同類(lèi)型的數據混合運算, 范圍小的會(huì )提升成范圍大的.
2.對于 short, byte 這種比 4 個(gè)字節小的類(lèi)型, 會(huì )先提升成 4 個(gè)字節的 int , 再運算.
public static void main(String[] args) { int a = 10; //方法1 String str1 = 10+" "; //方法2 String str2 = String.valueOf(a); }
public static void main(String[] args) { String str = "123456"; int b = Integer.valueOf(str); int c = Integer.parseInt(str); }
內置數據類(lèi)型共有8種,每一個(gè)內置類(lèi)型都會(huì )對應一個(gè)包裝類(lèi),這里也不深入講解。簡(jiǎn)單來(lái)說(shuō)就是方便了數據的處理
感謝閱讀!
到此這篇關(guān)于java基礎詳解之數據類(lèi)型知識點(diǎn)總結的文章就介紹到這了,更多相關(guān)java數據類(lèi)型總結內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站