Java 简明教程

Java - Type Casting

Java Type Casting (Type Conversion)

Type casting 是一种由编译器或程序员用来转换一个 data type 到另一个 data type 的技术。例如,将 int 转换为 double、double 转换为 int、short 转换为 int,等等。类型类型转换也称为类型转换。

在 Java 编程中允许两种类型的强制类型转换:

  1. Widening type casting

  2. Narrowing type casting

Widening Type Casting

Widening Type Casting 也称为 implicit type casting,其中一个较小的类型被转换为一个较大的类型,它是由编译器自动完成的。

以下是 Java 中类型提升强制转换的层级:

byte > short > char > int > long > float > double

编译器在类型转换中发挥作用,但是程序员不发挥作用。它在编译时更改 variables 的类型。此外,类型转换仅从小型数据类型转换到大型数据类型。

Example 1: Widening Type Casting

在下面的示例中,我们演示了当编译器尝试将一个大的数据类型转换为一个小的数据类型时,我们可能会得到一个错误。这里,我们创建了一个 num1 整数和 num2 double 变量。num1 和 num2 的和将是 double,当我们尝试将其存储到 int 类型和中时,编译器将给出一个错误。

package com.tutorialspoint;

public class Tester {
   // Main driver method
   public static void main(String[] args) {
      // Define int variables
      int num1 = 5004;
      double num2 = 2.5;
      int sum = num1 + num2;
      // show output
      System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum);
   }
}

编译并运行 Tester。这将产生以下结果:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
	Type mismatch: cannot convert from double to int

	at com.tutorialspoint.Tester.main(Tester.java:9)

Example 2: Widening Type Casting

在下面的示例中,我们创建了 num1 和 num2 变量,与第一个示例中相同。我们将两个数字的和存储在 double 类型的 sum 变量中。在输出中,我们可以看到 double 类型的和。

package com.tutorialspoint;

public class Tester {
   // Main driver method
   public static void main(String[] args) {
      // Define int variables
      int num1 = 5004;
      double num2 = 2.5;
      double sum = num1 + num2;
      // show output
      System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum);
   }
}

编译并运行 Tester。这将产生以下结果:

The sum of 5004 and 2.5 is 5006.5

Narrowing Type Casting

Narrowing type casting 也称为 explicit type castingexplicit type conversion,由程序员手动完成。在变窄强制类型转换中,一个较大的类型可以被转换为一个较小的类型。

当程序员在编写代码时改变了变量的类型。我们可以使用强制转换运算符来改变变量的类型。例如,double 转换为 int 或 int 转换为 double。

Syntax

下面是强制类型转换的语法,即手动类型转换:

double doubleNum = (double) num;

上面的代码语句将变量转换为 double 类型。

Example: Narrowing Type Casting

在下面的示例中,我们定义了一个整数类型的 num 变量,并用值对其进行初始化。而且,我们定义了一个 double 类型的 doubleNum 变量,并在将 num 变量转换为 double 之后存储它的值。

接下来,我们创建了 'convertedInt' 整数类型变量,并在类型强制转换为 int 之后存储 double 值。在输出中,我们可以看到 double 和 int 变量的值。

package com.tutorialspoint;

public class Tester {
   // Main driver method
   public static void main(String[] args) {
      // Define int variable
      int num = 5004;
      // Type casting int to double
      double doubleNum = (double) num;
      // show output
      System.out.println("The value of " + num + " after converting to the double is " + doubleNum);
      // Type casting double to int
      int convertedInt = (int) doubleNum;
      // show output
      System.out.println("The value of " + doubleNum + " after converting to the int again is " + convertedInt);
   }
}

编译并运行 Tester。这将产生以下结果:

The value of 5004 after converting to the double is 5004.0
The value of 5004.0 after converting to the int again is 5004