java基本數據類型及運算的注意事項
一、基本數據類型
序號 | 類型 | 位數 | 範圍 | 說明 |
整數類型 (最高位爲符號位) | byte | 8位 | -128(-27)~127(27-1) | 默認類型爲int 二進制0b開頭 八進制0開頭 十六進制0x開頭 |
short | 16位 | -32 768(-215)~32 767(215-1) | ||
int | 32位 | -2 147 483 648(-231)~2 147 483 647(231-1) | ||
long | 64位 | -9 223 372 036 854 775 808(-263)~9 223 372 036 854 775 807(263-1) | ||
字符類型 | char | 16位 | 單字符、轉義字符、Unicode | 例:'A','\r','u9999' |
浮點類型(最高位爲符號位) | float | 32位 | 1位爲符號8位爲指數23位爲尾數 | 默認類型爲double |
double | 64位 | 1位爲符號11位爲指數52位爲尾數 | ||
布爾類型 | boolean | 1位 | true或false | 不能用0或非0代表 |
常量後加l或L表示該常量爲long類型,佔64爲,否則默認爲int類型佔32位;
常量後加f或F表示該常量爲float類型,佔32位,否則默認爲64位佔64位。浮點數可以採用十進制形式(例:5.12、.512),也可以採用科學計數法形式(例:5.12e2或5.12E2)。
特殊的直接量null,可以賦給任何引用類型的變量,表示該引用類型指向的地址爲空。
特殊的浮點數值:正無窮大、負無窮大、非數,表示溢出和出錯。使用Double類和Float類的POSITIVE_INFINITY、NEGATIVE_INFINITY和NaN表示。所有正無窮大的數值都是相等的,所有負無窮大的數值都是相等的,NaN不與任何數值相等,NaN與NaN也不相等。只有浮點數除以0才能得到正無窮大或負無窮大,整數除以0會拋出異常。0.0除以0.0或對一個負數開方得到非數即NaN。
整數型數值或浮點型數值可以使用下劃線作爲分隔,java7以上支持,例如:4_524_012_578,0B1000_1111_0101_1011。
二、類型轉換
類型的自動提升:當一個表達式中包含多個基本類型的值時,整個表達式將發生自動提升。自動提升的規則如下:
- 所有byte類型、short類型和char類型將自動提升爲int類型
- 整個算數表達式的數據類型自動提升到與表達式中最坐高等級操作數同樣的類型。
強制類型類型轉換,語法格式:(type)value。字符串轉爲基本類型時,需要使用對應的包裝類:Byte、Short、Integer、Long、Character、Float、Double,它們提供了靜態方法parseXxx(String str)用於轉換。
三、運算
運算符優先級
左移運算<<,將操作數的二進制碼整體左移指定位數,右邊空出的位用0填充,注意:負數的符號位也參與移動。
右移運算>>,將操作數的二進制碼整體右移指定位數,空出來的位置使用符號位填充,注意:符號位始終保持不變。
無符號右移運算>>>,將操作數的二進制碼整體右移指定位數,空出來的位置使用0填充,注意:符號位變爲0。
移位運算遵循的規則:
- 對於低於int類型(byte、short、char)的操作數總是先自動轉換爲int類型,然後再移位;
- 對於int型的移位操作a>>b,當b>32時,系統先用b對32求餘,餘數爲真正的移位數,例如:a>>33和a>>1的結果一樣;
- 對於long型的移位操作a>>b,當b>64時,系統先用b對64求餘,餘數爲真正的移位數。
邏輯運算符&&和&的區別:對於&&,如果左邊的表達式爲false,則右邊的表達式將不再就算;而&,兩邊的表達式總會計算,不論左邊的表達式是否爲false。
邏輯運算符||和|的區別:對於||,如果左邊的表達式爲true,則右邊的表達式將不再就算;而|,兩邊的表達式總會計算,不論左邊的表達式是否爲true。