一、8種基本數據類型以及占用內存空間大小
boolean? 1byte或4byte
byte? ? ? ? 8bit/1byte
char? ? ? ? 16bit/2byte
short? ? ? ?16bit/2byte
float? ? ? ? 32bit/4byte
int? ? ? ? ? ?32bit/4byte
long? ? ? ? 64bit/8byte
double? ? 64bit/8byte
二、自動類型轉換
2.1、類型自動提升
占用內存小的數據類型可以自動轉換成占用內存大的數據類型。
允許類型自動提升的順序如下:
byte-->short-->int-->long-->float-->double或者char-->int-->long-->float-->double
具體規則:
? ? 如果兩個操作數其中有一個是double類型,另一個操作就會轉換為double類型。
否則,如果其中一個操作數是float類型,另一個將會轉換為float類型。
否則,如果其中一個操作數是long類型,另一個會轉換為long類型。
否則,兩個操作數都轉換為int類型。
測試用例1:
double d = 1.0;int i = 1;
// int sum = i+d;//這行代碼放開編譯會報錯,提示Type mismatch: cannot convert from double to intdouble sum = i+d;//會先將i的數據類型自動提升為double,然后兩個double類型做運算,返回也是double類型
測試用例2:
float d = 1.0f;long i = 1;
// long sum = i+d;//這行代碼放開編譯會報錯,提示Type mismatch: cannot convert from float to longfloat sum = i+d;//會先將i的數據類型自動提升為float,然后兩個float類型做運算,返回也是float類型
通過上面的兩個測試用例證明我們的規則是正確的。
2.2、類型自動強轉
占用內存大的數據類型可以自動強轉成占用內存小的數據類型。
下面這幾種情況會先自動提升,然后自動強轉
測試用例3:
byte b = 127;byte b2 = ++b;//先執行++b,返回int類型,然后強轉成byte類型賦值給b2System.out.println(b2);//輸出-128
測試用例4:
byte b = -128;b += -128;//先執行b+(-128),返回int類型,然后強轉成byte類型賦值給bSystem.out.println(b);//輸出0
?
?