在 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