什么是java強制類型轉(zhuǎn)換?
1. 概念
所謂的強制類型轉(zhuǎn)換,其實是自動類型轉(zhuǎn)換的逆過程,在數(shù)據(jù)類型兼容的情況下,將容量大的數(shù)據(jù)類型轉(zhuǎn)換為容量小的數(shù)據(jù)類型。強制類型轉(zhuǎn)換也被稱為顯式類型轉(zhuǎn)換,需要我們顯式地進行轉(zhuǎn)換操作,必須在=等號后面的類型前加上強制()轉(zhuǎn)換符,并且有可能會造成數(shù)據(jù)精度的降低或溢出。
2. 轉(zhuǎn)換規(guī)律
強制類型轉(zhuǎn)換時,也具有一定的規(guī)律,但是這個規(guī)律比較簡單。
1. 進行轉(zhuǎn)換的數(shù)據(jù)類型必須是兼容的;
2. 通常,字符串不能直接轉(zhuǎn)換為基本類型;
3. 通過基本類型對應(yīng)的包裝類,可以把字符串類型的數(shù)值轉(zhuǎn)換成對應(yīng)的基本類型。如String s = “100”; int i = Integer.parseInt(s);
4. boolean類型不可以轉(zhuǎn)換成其他數(shù)據(jù)類型。
為了讓大家更好地理解這些規(guī)律,還是給大家設(shè)計一些代碼案例,往下看吧。
3. 案例
強制類型轉(zhuǎn)換格式:(type)value其中type是要強制類型轉(zhuǎn)換后的數(shù)據(jù)類型。
public class TypeDemo04 { public static void main(String[] args) { // 強制類型轉(zhuǎn)換:大轉(zhuǎn)小。 double d1 = 100; // double-->int,大轉(zhuǎn)小,d1的類型為double,i的類型為int,需要強制轉(zhuǎn)換,類型前添加(要轉(zhuǎn)換成的類型)。 int i = (int) d1; System.out.println("i=" + i); //int-->char,大轉(zhuǎn)小 int j = 97; char c1 = (char) j; System.out.println("c1="+c1); //int-->byte,大轉(zhuǎn)小,精度可能會丟失 int k =128; //byte類型是8位,最大值為127,當(dāng)int強制轉(zhuǎn)換為byte類型時,128就會導(dǎo)致溢出變成-128。 byte b = (byte)k; System.out.println("b="+b);//-128 //表達式中進行類型轉(zhuǎn)換 double d2 = 10; double d3 = 12; int m = (int) (d2 + d3); System.out.println("m="+m); //double+int,小類型和大類型進行計算,會進行類型提升,最終的結(jié)果變成大類型。 //Type mismatch: cannot convert from double to int //int n = d2 + k; int n = (int)d2 + k; System.out.println("n="+n); //浮點數(shù)到整數(shù)的轉(zhuǎn)換,是通過舍棄小數(shù)得到的,而不是四舍五入 int x=(int)55.9;//55 int y=(int)-28.89f; System.out.println("x="+x+",y="+y);//-28 }}
大家要注意:
類型轉(zhuǎn)換時可能會導(dǎo)致溢出或精度的丟失,另外浮點數(shù)到整數(shù)的轉(zhuǎn)換是通過舍棄小數(shù)得到的,而不是四舍五入。我們可以看下圖的執(zhí)行結(jié)果:
4. 類型提升補充說明
在上面強制轉(zhuǎn)換時,如果涉及到不同數(shù)據(jù)類型之間的數(shù)學(xué)運算,比如+、-、*、/等操作,大家要注意:小類型的數(shù)據(jù)和大類型的數(shù)據(jù)進行計算時,會自動進行類型提升,最終的結(jié)果變成大類型!關(guān)于這一塊的內(nèi)容,大家暫時先了解這么多,后面講運算符時我再細說。
public class TypeDemo04 { public static void main(String[] args) { // 強制類型轉(zhuǎn)換:大轉(zhuǎn)小 //類型提升 //double+int,小類型和大類型進行計算,會進行類型提升,最終的結(jié)果變成大類型。 //Type mismatch: cannot convert from double to int //int m = d2 + k; int m = (int)d2 + k; System.out.println("m="+m); }}
類型自動提升后,如果不進行強制類型轉(zhuǎn)換,也是會出現(xiàn)如下異常:
5.java強制類型轉(zhuǎn)換為什么是(數(shù)據(jù)類型)而不是數(shù)據(jù)類型()
Java中的強制類型轉(zhuǎn)換使用的語法是"(數(shù)據(jù)類型) 值",而不是"值 數(shù)據(jù)類型()",這是因為在Java中,強制類型轉(zhuǎn)換是一種運算符,而不是一個函數(shù)調(diào)用。
運算符是一種操作符,它把一個或多個值作為輸入,并生成一個輸出。在Java中,強制類型轉(zhuǎn)換運算符需要一個數(shù)據(jù)類型作為輸入,并且需要將一個值強制轉(zhuǎn)換為該數(shù)據(jù)類型。因此,強制類型轉(zhuǎn)換運算符的語法為"(數(shù)據(jù)類型) 值"。
相反,如果使用"值 數(shù)據(jù)類型()"的語法,這將被解釋為一個函數(shù)調(diào)用,其中"值"是函數(shù)的參數(shù),并且"數(shù)據(jù)類型()"被解釋為函數(shù)名。但是,Java中并沒有名為"數(shù)據(jù)類型()"的函數(shù),因此使用此語法將會導(dǎo)致語法錯誤。
總之,使用"(數(shù)據(jù)類型) 值"的語法是Java中強制類型轉(zhuǎn)換的正確方式。