1. 程式人生 > 實用技巧 >JavaSE 05-Java基礎——型別轉換

JavaSE 05-Java基礎——型別轉換

簡介

由於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了,所以在轉換時儘量避免這種記憶體溢位的現象。
這種帶了括號的就是強制轉換。

型別轉換的規則

型別轉換分為兩種,一種時強制型別轉換,一種是自動型別轉換
強制型別轉換的格式:(型別)變數名
自動型別轉換規則:高 --> 低
自動型別轉換規則:低 --> 高

由低轉到高,它是不用強制轉換的,也不會報錯的。

注意點:

  1. 不能對布林值進行轉換;
  2. 不能把物件型別轉換為不相干的型別;
  3. 再把高容量轉換到低容量的時候,要強制轉換。
  4. 轉換的時候可能存在記憶體一處,或者精度問題!

第四條的栗子:

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
    }
}