1. 程式人生 > >JAVA基本數據類型轉換的註意事項

JAVA基本數據類型轉換的註意事項

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基本數據類型轉換的註意事項