Java 是一種強類型的語言,聲明變量時必須指明數據類型。變量(variable)的值佔據一定的內存空間。不同類型的變量佔據不同的大小。
java的數據類型分爲基本數據類型和引用數據類型兩種。基本數據類型不涉及內存的開闢問題。
Java的引用數據類型可分爲三種:類(class)、接口(interface)、數組。
Java中共有8種基本數據類型,包括4 種整型、2 種浮點型、1 種字符型、1 種布爾型,請見下表。
數據類型 | 說明 | 所佔內存 | 數據範圍 | 備註 |
---|---|---|---|---|
byte | 字節型 | 1 byte | -128~127 | |
short | 短整型 | 2 bytes | -32768~32767 | |
int | 整型 | 4 bytes | -2147483648~2147483637 | |
long | 長整型 | 8 bytes | 9223372036854775807 | long最後要有一個L字母(大小寫無所謂)。 |
float | 單精度浮點型 | 4 bytes | -3.4E38~3.4E38 | float最後要有一個F字母(大小寫無所謂)。 |
double | 雙精度浮點型 | 8 bytes | -1.7E308~1.7E308 | double最後最好有一個D字母(大小寫無所謂)。 |
char | 字符型 | 2 bytes | 0~255 | 字符型數據只能是一個字符,由單引號包圍。 |
boolean | 布爾型 | 1 bit | true, false |
在Java中,整型數據的長度與平臺無關,這就解決了軟件從一個平臺移植到另一個平臺時給程序員帶來的諸多問題。與此相反,C/C++ 整型數據的長度是與平臺相關的,程序員需要針對不同平臺選擇合適的整型,這就可能導致在64位系統上穩定運行的程序在32位系統上發生整型溢出。
整型(byte、short、int、long)
對於整型數據,通常情況下使用 int 類型。但如果表示投放廣島長崎的原子彈釋放出的能量,就需要使用 long 類型了。byte 和 short 類型主要用於特定的應用場合,例如,底層的文件處理或者需要控制佔用存儲空間量的大數組。
八進制有一個前綴 0,例如 010 對應十進制中的 8;十六進制有一個前綴 0x,例如 0xCAFE;從 Java 7 開始,可以使用前綴 0b 來表示二進制數據,例如 0b1001 對應十進制中的 9。同樣從 Java 7 開始,可以使用下劃線來分隔數字,類似英文數字寫法,例如 1_000_000 表示 1,000,000,也就是一百萬。下劃線只是爲了讓代碼更加易讀,編譯器會刪除這些下劃線。另外,不像 C/C++,Java 不支持無符號類型(unsigned)。
整形變量常見問題:
1、int x; //若沒有對 x 賦值,x 的值未知,不爲0,故編譯報錯。
2、int max=Integer.MAX_VALUE; //int型變量最大值2147483647
System.out.println(max+1); //數據溢出,輸出-2147483648;解決方法:數據類型轉換爲Long型
3、int x = 10;
long y = x; //自動轉換,範圍小轉換爲範圍大類型
int temp = (int) y; //強制轉換,可能導致數據溢出
4、System.out.println(9/2); //輸出結果爲4,若要得到4.5,需進行類型轉換
浮點型(float、double)
float 類型有效數字最長爲 7 位,有效數字長度包括了整數部分和小數部分。例如:
- float x = 223.56F;
- float y = 100.00f;//不加F報錯
double 類型有效數字最長爲 15 位。與 float 類型一樣,double 後面也帶有標誌“D”或“d”。例如:
- double x = 23.45D;
- double y = 422.22d;
- double z = 562.234;
大多數情況下都是用 double 類型,float 的精度很難滿足需求。
常見問題:
1、double x=10.02;
System.out.println(x*x);
輸出結果100.400399999999是錯誤的,這是JDK的bug,需使用BigDecimal處理
字符型(char)
ASCII碼:大寫字母範圍:65~90。小寫字母範圍:97~122。
Java在定義中文字符時使用Unicode編碼而非ASCII編碼。例如定義中文字符:char x ='張';