JAVA基本數據類型轉換的註意事項
阿新 • • 發佈:2019-03-16
n) 註意事項 即使 編譯 1.4 排序 nbsp 什麽 錯誤
JAVA中基本數據類型:
類型: | 字節: | 範圍: | 默認值: |
byte | 1 | -128~127 | 0 |
short | 2 | -32768~32767 | 0 |
char | 2 | 0~65535 | ‘\u0000‘ |
int | 4 | -2147483648~2147483647 | 0 |
long | 8 | -2^63~2^63-1 | 0L或0l |
float | 4 | 3.402823e38~1.401298e-45 | 0.0F或0.0f |
double | 8 | 1.797693e308~4.9000000e-324 | 0.0D或0.0d |
boolean | 1 | false 或 true | false |
所以,基本數據類型的精度(亦稱容量大小)排序為(從小到大):(byte->short->char)->int->long->float->double、
向下轉換:(強制類型轉換)
當精度高的類型轉到精度低的類型時叫做向下轉換,向下轉換需要強制轉換,即使用 (類型名) 運算符,可能會導致精度降低或溢出。
向上轉換:(隱式類型轉換)
當精度低的類型轉到精度高的類型時叫做向上轉換,向上轉換一般直接由編譯器完成,當幾個基本數據類型參與運算時,計算結果的類型是參與運算中精度最高的那個運算數的類型,其他運算數的類型將被自動轉為精度最高的那個運算數的類型。
之所以要給byte,short,char三個類型加上括號,是因為,當它們參與運算時首先會被提升為int類型,也就說明他們之間不會發生隱式類型轉換。
另外,boolean類型不會發生類型轉換,即(boolean)運算符無意義,並且boolean類型只能被關鍵字 true 和 false,以及邏輯運算符的結果賦值。
例如:
1 byte a; 2 short b; 3 char c; 4 int d; 5 long e; 6 a = a+a;//錯誤,a + a的類型為int,因為在計算時,byte類型的a變量被自動提升為int類型 7 a = ‘A‘;//正確,‘A‘是字符字面量,是一個常量,值為65,在byte範圍內8 a = 12;//正確,可能會問,12這個字面量在java中是int類型,但是 a 是byte類型,為什麽不報錯呢,因為,編譯器知道12在byte範圍內,所以自動轉為了(short)12,但如果賦值的是a = 200,那就錯誤了,因為編譯器知道200是超出byte範圍的(在編譯的時候,編譯器只知道常量的值,知道它是否超出範圍,編譯器不知道變量的值,所以無法判斷一個變量是否超出範圍,因為變量的值是在運行的時候確定的) 9 10 a = Byte.MAX_VALUE +1;//報錯 11 b = Short.MAX_VALUE +1;//報錯 12 c = Char.MAX_VALUE +1;//報錯 13 //上述三行報錯原因是因為,byte,short,char三個類型參與計算時首先會提升為int類型,但在C語言當中(char和short類型)參與計算時不會被提升,所以在C語言中值為 -1 14 d = Integer.MAX_VALUE +1;//值為-1 15 e = Long.MAX_VALUE +1;//值為-1L 16 //因為int和long類型不存在提升,所以會出現-1或-1L
JAVA基本數據類型轉換的註意事項