JavaSE 05-Java基礎——型別轉換
阿新 • • 發佈:2020-12-15
簡介
由於Java時強型別語言,所以要進行有些運算的時候的,需要用到型別轉換。
比如,整型可以和字元和字串可以混和運算的,因為char字元和字串本質上就是整數型別的。
所以下面的那一串都是可以做加減乘除運算的。
低 -------------------------------------------> 高
byte,short,char -> int -> long -> float -> double
但是,運算中,不同型別的資料先轉化為同一型別,然後進行運算,它需要先轉換才能進行運算。
轉換的過程由上面的線,從低到高,這裡的從低到高是它的位元組數,byte和short就會少一點,而float和double就會大一點,
可是float是32位,long是64位,float為什麼會比long大呢,因為小數的優先順序會比整數大。
這裡會有一個問題,看程式碼:
public class Demo04 {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i; // 記憶體溢位
System.out.println(b); // -128
}
}
這裡會有一個記憶體溢位的問題,因為128已經超過了byte的最大範圍(127),所以這個數不可能會是128了,所以在轉換時儘量避免這種記憶體溢位的現象。
這種帶了括號的就是強制轉換。
型別轉換的規則
型別轉換分為兩種,一種時強制型別轉換,一種是自動型別轉換
強制型別轉換的格式:(型別)變數名
自動型別轉換規則:高 --> 低
自動型別轉換規則:低 --> 高
由低轉到高,它是不用強制轉換的,也不會報錯的。
注意點:
- 不能對布林值進行轉換;
- 不能把物件型別轉換為不相干的型別;
- 再把高容量轉換到低容量的時候,要強制轉換。
- 轉換的時候可能存在記憶體一處,或者精度問題!
第四條的栗子:
public class Demo04 {
public static void main(String[] args) {
System.out.println((int)23.7); // 23
System.out.println((int)-45.89f); // 45
}
}
幾個常見的問題
廢話不多說,直接看程式碼,程式碼的註釋已經很詳細了:
public class Demo05 {
public static void main(String[] args) {
// 操作比較大的數的時候,注意溢位問題
// JDK新特新,數字之間可以用下劃線分割
int money = 10_0000_0000;
// System.out.println(money); // 1000000000
int year = 20;
int total = money * year;
long total2 = money * year; // 預設是int,轉換之前就出問題了
// System.out.println(total); -1474836480,計算的時候溢位了
// System.out.println(total2); 還是沒變
long total3 = money * ((long)year);
System.out.println(total3);
// 寫程式碼時,Long 型別後面要加大寫的L,因為在程式碼中小寫的l可能會看成1
}
}