Java基礎05——類型轉換
類型轉換
- 由于Java是強類型語言,所以要進行有些運算的時候,需要用到類型轉換。
如:
-
byte(占1個字節),short(占2個字節),char(占2個字節)→int(4個字節)→long(占8個字節)→float(占4個字節)→double(占8個字節)
-
float之前均為整數類型,之后為浮點數(小數)類型
-
由此可見浮點數(小數)的優先級一定大于整數。
-
運算中,不同類型的數據先轉化為同一類型,然后進行運算
-
強制類型轉換:
-
由高到低
-
利用(),所轉換類型,叫強制類型轉換 格式:(類型)變量名
public class 強制類型轉換{public static void main(String[] args){int i = 128;byte b =(byte)i; //(類型)變量名// 并且byte的最大取值范圍是127,最小是-128,以上取值128,超出范圍,輸出的結果不可控(不知道變成什么),專用名詞:內存溢出。// 所以,取值要避免內存溢出 }}
-
轉換時,要避免內存溢出
-
-
在IDEA上實操:
整數類型和浮點數類型(具體范圍):在Java基礎03中,[Java的數據類型分為兩大類]標題上
- 自動類型轉換
- 由低到高(并不需要任何其他操作)
public class 自動類型轉換{public static void main(String[] args){int i = 128;double = i; //因為式由高到低,會自動轉換}
}
- 在IDEA上實操
注意點:
/*
注意點:
1.不能對布爾值(Boolean)進行轉換
2.不能把對象類型轉換不相干的類型
3.把高容量轉換為低容量,強制轉換
4.轉換的時候可能存在內存溢出,或者精度問題!
*/
public class 驗證注意點{public static void main(String[] args){System.out.println((int)22.5); //輸出結果為22,精度丟失0.5//System.out.println((boolean)22.5); //會出現(不兼容類型:double無法轉換為BooleanSystem.out.println((int)23.5f); // 輸出結果為23,精度丟失0.5}
}
- 在IDEA上實操
public class 鞏固{public static main(String[] aegs){char c = 'A';int d = c+1;System.out.println(d); // 低到高,無需任何其他操作System.out.println((char)d); //當前d是int類型,轉為char類型,由高轉低,需要強制轉換。}
}
- 在IDEA上實操
類型轉換拓展——當操作比較大的時候,注意溢出問題
public class 類型轉換拓展{public static void main(String[] args){// 拓展:當操作比較大的時候,注意溢出問題// 數字之間可以用下劃線分割,下劃線并不會被輸出int money = 10_0000_0000; // money(錢)int years = 20; // years(年份)int total = money * years; // total(總數)System.out.println(total); //輸出本該是200億,但是卻是負數,這種狀態就是計算的時候溢出了long total2 = money * years; //因為這兩個變量默認格式是int,轉換之前已經存在問題了?System.out.println(total2);long total3 = money *((long)years); //已知在轉換前就出問題了,那么在之前就強制轉換一個變量為long,后續就會以long類型輸出(避免內存溢出)System.out.println(total3);}
}
解決辦法總結:
- 步驟1.先將最后輸出結果放到能承受的類型當中(由底到高)
- 就好比例子中:int和long,因為int范圍是-2147483648~2147483647(21億左右)而輸出的結果卻是200億,遠高于int范圍,那么就要轉化為比它更高的long
- 步驟2.若兩個(或多個)變量均低于結果輸出類型(那么最后的結果是先計算低類型的值,在轉換為高類型的值,若低類型的值先溢出,再轉換為高類型的值已經晚了)
- 就好比例子中:兩個變量都是int,它們相乘的時候,最終結果也是int,結果本身已經超出int的范圍(已經出問題了),在轉換為long晚了。
- 步驟3.那么將它們其中一個強制轉換為高類型(那么最后的結果是直接以高類型的值輸出,結果就非常準確)
- 就好比例子中:先將變量[years]轉化為long,再進行計算,就不會出現int溢出的情況,最后的結果是直接以long類型輸出的,long類型的范圍-9223372036854775808~9223372036854775807(遠超200億)不會出現溢出的情況,所以最后的結果是準確的。
在IDEA上實操