1、Java中基本數據類型包括:整型(byte、short、int、long)、字符型(char)、布爾型(boolean)、浮點型(float、double)三種類型。
2、所占內存分別為:byte:1Byte;short:2Byte;int:4Byte;long:8Byte;char:2Byte;boolean:1Byte;float:4Byte;double:8Byte;
3、表示數的范圍byte:[-128~127];short:[-32768~32767];int:[-2147483648~2147483647];long:[-9223372036854774808~9223372036854774807];
float:[3.402823e+38 ~ 1.401298e-45];double:[1.797693e+308~ 4.9000000e-324];
表示范圍的計算:
例如byte類型:
00000_0000~0111_1111:表示0~127;
10000_0000~1111_1111:表示-128~-1;
10000_0000 為-0;規定-0 = -128;
4、在Java中所有的整型數據默認都為int類型,浮點型默認為double;其它類型byte、short會隱式轉換(若不超出表示范圍);eg.:
1 byte b = 10; //隱式轉換 2 short s = 10; //隱式轉換 3 int i = 10; 4 long l = 10L; //需要L或l注明 5 float f = 10F; //需要F或f注明 6 double d = 10;
5、擴展轉換,擴展轉換不必要進行顯示的類型轉換,因為目標類型足夠容納當前類型不會丟失信息。

eg.:
byte b = 10; //隱式轉換 short s = 10; //隱式轉換 int i = 10; long l = 10L; //需要L或l注明 float f = 10F; //需要F或f注明 double d = 10; //擴展轉換 short bUp = b; int sUp = s; long iUp = i; float lUp = l; double dUp = f; char ch = '1'; int chUp = ch-48;
6、強制類型轉換,將容納更多信息的數據類型轉換成一個容量更小的數據類型,可能存在精度損失的風險,編譯器要求程序員進行強制類型轉換;
eg.
int age = 10; short ageDown = (short)age;//強制類型轉換不會丟失信息 System.out.println(ageDown); int width = 130; byte widthDown = (byte)width;//強制類型轉換會丟失信息 System.out.println(widthDown);
輸出:
10
-126
float average = 10.5f; int averageDown = (int)average; System.out.println(averageDown);
輸出:
10
由於with = 130超出byte數據類型的表示范圍,所以編譯器會進行高位截斷:
130 原碼:0000_0000_0000_0000_0000_0000_1000_0010 ;
補碼:0000_0000_0000_0000_0000_0000_1000_0010 ;
將130的補碼截取低八位:1000_0010 ;
1000_0010 ;為補碼形式最高位為符號位,可見結果是一個負數,減一取反求得原碼為:1111_1110;
所以輸出為-126。
而浮點數直接截斷小數部分。
通常表達式中的最大的數據類型結果決定了該表達式的數據類型。
7、練習題:
一、二會通過編譯?
/** * 一: */ short s1 = 1; s1 = s1 + 1;
/** * 二: */ short s1 = 1; s1 += 1;
答案:二
因為在Java中所有整型數據默認都為int型 s1 = s1 + 1; 1為int型需要強制裝換;而 s1 += 1; 編譯器會進行隱式的類型轉換。
寫的第一篇文章寫得好方/(ㄒoㄒ)/~~。。。。。
