Java定義了八種基本數據類型:byte,short,int,long,char,float,double,boolean。java
Java的八種基本類型說明以下所示,其中每一種都有特定的格式和大小 |基本類型|說明|字節數 |:----:|:----:|:----: |byte|字節長度的整數,八位|1個字節 |short|短整數,十六位|2個字節 |int|整數,三十二位|4個字節 |long|長整數,六十四位|8個字節 |float|單精度浮點數,三十二位|4個字節 |double|雙精度浮點數,六十四位|8個字節 |char|Unicode字符|2個字節 |boolean|布爾值|1個字節程序員
基本類型的字面值有四種子類型:整數字面值,浮點數字面值,字符字面值,布爾字面值數組
Java定義了四種整數類型:byte,short,int,long。全部這些類型都是有符號的、正的整數或者負的整數。Java不支持無符號(正值)的整數。博客 名稱|寬度|範圍 :--:|:--:|:--:| long|64|-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 int|32|-2 147 483 648 ~ 2 147 483 647 short|16|-32 768 ~ 32767 byte|8|-128 ~ 127ide
當中,最經常使用的整數類型是int。函數
整數字面值能夠寫爲十進制,十六進制(加前綴0x或0X),八進制(加前綴0),二進制(加前綴0B或0b)性能
//十進制 int x=10; //十六進制數,即十進制的32 int y=0x20; //八進制,即十進制的15 int z=017; //二進制,即十進制的7 int u=0b0111;
整數字面值用於將值賦給byte,short,int和long類型的變量。所賦值不能超出變量的存儲範圍設計
byte b = 250;
long a = 120;
long a = 99999999999;
若是整數字面值太長,可讀性會受到影響。code
//十進制 int x=1_000_000; //十六進制數,即十進制的32 int y=0x2_0; //八進制,即十進制的15 int z=0_17; //二進制,即十進制的7 int u=0b0_111;
浮點數也稱爲實數,當計算須要小數精度的表達式時使用。 名稱|寬度|範圍 :--:|:--:|:--:| float|32|1.4e-045 ~ 3.4e+038 double|64|4.9e-324 ~ 1.8e+308對象
float索引
double
浮點數包含如下四個部分
例如,在1.7e8中,1是整數部分,7是小數部分,8是指數
char是用於存儲字符的數據類型。Java的設計初衷是容許程序員編寫在世界範圍內都可使用的語言,所以採用了Unicode標準來表示字符。Unicode定義了一個徹底國際化的字符集,可以表示所有人類語言中的全部字符,爲此須要使用十六位寬度來存儲。char的範圍是0 ~ 65536,沒有負的char值。
對於一些語種,例如英語、德語等,可使用八位寬度來表示這類語言的字符,使用Unicode在必定程度上會下降效率,但這是爲了在全球得到可移植性而必須付出的代價。
儘管char被設計爲容納Unicod字符,但也能夠用做整數類型,能夠對char類型的變量執行算術運算。
字符字面值是一個Unicode字符,或者是單引號括起來的一個轉義序列
例如
'a' 'b' '\b' 回退字符 '\n' 換行 '\r' 回車
布爾類型有兩個值,分別爲true和false。
例如,聲明一個布爾變量bool
boolean bool=true;
在涉及處理不一樣數據類型時,經常須要將一個變量的值賦給另外一個變量,這就須要進行類型轉換
默認轉換
強制轉換
注意要點
!!!!!!!注意!!!!!!!! 1:在java中,任何一個整數默認爲 int 類型 (1) 2:在java種,任何一個小數,默認爲 double 類型( 1.0) 3:123L 或者 1231 編譯器會將該數當成long類型 4:12.345f 或者12.345F 編譯器會將該數當成float類型
當從一種基本類型轉換向另外一種基本類型時,若是後者的大小和前者相同或者更大,就叫作加寬轉換
int a=10; long b=a;
收窄轉換髮生在從一種基本類型轉換爲另外一種更小類型的轉換中
long a=10; int b=(int)a;
long a=9876543210L; int b=(int)a; //輸出值是1286608618 System.out.println(b);
除了賦值外,在表達式中也可能會發生類型轉換。在表達式中,中間值要求的精度有時會超出操做數的範圍。博客
例如:
byte a = 40; byte b = 50; byte c = 100; int d = a * b / c;
中間部分 a b 很容易超出byte操做數的範圍。爲了解決這類問題,當對錶達式求值時,Java會自動將每一個byte,short或char操做數提高爲int類型。這意味着使用int類型而不是byte類型執行子表達式a b。所以,即時a和b都被指定爲byte類型,中間表達式(50 * 40)的結果2000是合法的。
自動類型提高頗有用,但有時候會致使難以理解的編譯時錯誤。例如:
byte b=10; //錯誤 b= b*2;
如上代碼試圖將 10 * 2 的結果(一個徹底有效的byte值)保存到byte變量中,可是編譯器卻提示錯誤。當計算表達式的值時,操做數被自動提高爲int類型,因此結果也被提高爲int類型。所以,如今是試圖將一個int類型值轉爲byte變量,若是不使用強制類型轉換,就不能將結果賦給byte變量。
Java定義了幾個應用於表達式的類型提高規則。