在 Java 中強制轉換變數

Mohammad Irfan 2023年1月30日 2022年4月22日
  1. Java 中的隱式轉換
  2. Java 中的顯式轉換
  3. 在 Java 中避免 CastException
在 Java 中強制轉換變數

本教程介紹如何在 Java 中強制轉換變數或將變數轉換為另一種型別。

轉換用於在程式語言中將一個值/變數轉換/轉換為另一種型別。Java 支援豐富的資料型別,如 intfloatdoubleboolean 等,在編寫程式碼時,可能需要轉換變數。

Java 支援兩種型別的轉換,隱式轉換和顯式轉換。如果我們將 int 轉換為 longdouble,那麼 Java 會隱式執行此操作,因為 longdouble 使用的位元組數比 int 多,我們會執行相反的操作(即,將 double 轉換為 int) 那麼它可能會由於整數容量而導致資料丟失。

因此,Java 允許在較低資料型別到較高資料型別之間進行隱式轉換,但在較高資料型別到較低資料型別之間進行顯式轉換。讓我們通過一些例子來理解。

Java 中的隱式轉換

在這裡,在這個例子中,我們將 int 轉換為 float 型別,隱式轉換。由於 Java 允許在沒有太多程式碼的情況下進行隱式轉換,因此該程式碼可以正常工作。

public class SimpleTesting{
    public static void main(String[] args){

        int a = 23;
        System.out.println("int "+a);
        // int to float - implicit casting
        float f = a;
        System.out.println("float "+f);
    }
}    

輸出:

int 23
float 23.0

Java 中的顯式轉換

在某些情況下,由於資料丟失,Java 確實需要顯式轉換。

例如,如果我們將 float 轉換為 int,那麼小數點後的值會被截斷;這就是 Java 不隱式執行此操作並引發編譯時錯誤的原因。請參見下面的示例。

public class SimpleTesting{
    public static void main(String[] args){

        float a = 23;
        System.out.println("float "+a);
        // float to int - explicit casting
        int f = a;
        System.out.println("int "+f);
    }
}    

輸出:

Type mismatch: cannot convert from float to int

這個編譯時錯誤是對程式設計師的警告,以避免這種資料丟失。如果程式設計師仍想進行型別轉換,Java 允許使用型別名稱將型別名稱括在函式括號中的型別轉換運算子。

此編譯器編譯並執行程式碼,但看到值被截斷。請參見下面的示例。

public class SimpleTesting{
    public static void main(String[] args){

        float a = 23.5f;
        System.out.println("float "+a);
        // float to int - explicit casting
        int f = (int)a;
        System.out.println("int "+f);
    }
}    

輸出:

float 23.50
int 23

我們還可以使用 cast() 方法將物件值轉換為原始值。請參見下面的示例。

public class SimpleTesting{

    public static void main(String[] args){

        Integer a = 23;
        System.out.println("integer "+a);
        // float to int - explicit casting
        int i = (Integer.class.cast(a));
        System.out.println("int "+i);
    }
}

輸出:

integer 23
int 23

在 Java 中避免 CastException

轉換 Java 物件也是一個主要問題,在轉換之前需要正確的類型別。例如,如果我們用 double 強制轉換 float 型別,Java 不允許這樣做並將 ClassCastException 丟擲到控制檯。

請參見下面的示例。

public class SimpleTesting{
    public static void main(String[] args){

        Number num = new Float(15.5);
        System.out.println(num);
        Double d = (Double)num;
        System.out.println(d);
    }
}    

輸出:

15.5
Exception in thread "main" java.lang.ClassCastException

相關文章 - Java Casting