基本數據類型
整數型
byte --- 字節型 --- 1個字節 --- -27~27-1 -> -128~127
byte b1 = 25; byte b2 = 127;
short --- 短整型 --- 2個字節 --- -215~215-1 -> -32768~32767
int --- 整型 --- 4個字節 --- -231~231-1 --- 在Java中整數默認為int類型
System.out.println(5);
long --- 長整型 --- 8個字節 --- -263~263-1 --- 需要在結尾添加l/L作為標識
long l = 2L;
浮點型
float --- 單精度 --- 4個字節 --- 大概-1038~1038 ---需要在結尾添加f/F作為標識
float f = 3.5f;
double --- 雙精度 --- 8個字節 --- 大概-10308~10308---在Java中小數默認為double類型
double d = 2.64; double d2 = 5.21D; double d3 = 7.33d;
double d = 4e4; 表示4*104 aeb表示a*10b,表示十進制的科學計數法
double d = 0x5p3; 表示十六進制的科學計數法 xpy表示x*2y
字符型
char --- 字符型 --- 2個字節 --- 0~65535 ---默認編碼就是utf-16
char c = ‘a’; char c2 = ‘4’; char c3 = ‘\u20ac’;
// 不存在空字符和負數的字符,無論這個字符是純數字或者是字符
boolean類型
數據類型的轉換
自動類型轉換/隱式轉換
byte b = 3;
int i = b;
int i =7;
long l = i;
float f = 3.57f;
double d = f;
規律一:小的類型可以自動轉化為大的類型
long l = 10; --- Java中整數默認為int,所以10就是int類型,int可以自動提升為long類型 --- 如果一個整數在int的范圍內,那么在賦值給long類型的時候可以不加L
int i = 10;
float f = i;
規律二:整數可以自動轉化為小數,但是可能產生精度損失
float f = 500;
char c = ‘a’;
int i = c;
規律三:字符可以自動轉化為整數
short類型和char類型范圍沒有完全重合也不能完全包含
short s = ‘a’; --- 可以 --- ‘a’是字面量,是一個確定的值。所以在編譯的時候就能確定 ‘a’的值是否在short的取值范圍內;如果在這個范圍內,就允許轉化
char c = 97; --- 可以 --- 97是字面量,是一個確定的值。所以在編譯的時候就能確定 97的值是否在char的取值范圍內;如果在這個范圍內,也允許轉化
char c = ‘a’;
short s = c; --- 不可以 --- c是變量,所以在編譯期間只能確定c是一個char類型的值但是不能確定c的具體值;那么就會在編譯期間比對兩個類型之間是否能夠完全轉化,發現char類型不能完全轉化為short類型,所以認為這個值會有超過short取值范圍的風險,因此不允許轉化
short s = 97;
char c = s; --- 不可以
byte/short/char可以參與自增/自減運算,運算完成之后結果類型沒有改變 --- 因為在底層做了一次強制轉換
規律四:byte,short,char在計算的時候會自動轉換為int類型。以下代碼報錯。單純的賦值不算是運算。