类型转换是一种技术,它由编译器或程序员用来将一种数据类型转换为另一种。例如,将 int
转换为 double
,double
转换为 int
,short
转换为 int
等。类型转换也称为类型转换。
Java 中有两种允许的类型转换方式:
-
宽化类型转换(Widening type casting)
-
窄化类型转换(Narrowing type casting)
宽化类型转换
宽化类型转换也称为隐式类型转换,其中较小的类型被转换为较大的类型,这是编译器自动完成的。
Java 中的宽化类型转换层次如下:
byte > short > char > int > long > float > double
编译器在类型转换中起到了作用,而不是程序员。它在编译时期更改变量的类型。同时,类型转换只发生在从小数据类型到大数据类型之间。
示例 1:宽化类型转换
在下面的例子中,我们展示了当编译器尝试将大数据类型转换为小数据类型时可能会出现错误的情况。在这里,我们创建了一个 int
类型的变量 num1
和一个 double
类型的变量 num2
。num1
和 num2
的和是一个 double
类型,当我们尝试将其存储为 int
类型的和时,编译器会给出错误。
package com.tutorialspoint;
public class Tester {
public static void main(String[] args) {
int num1 = 5004;
double num2 = 2.5;
int sum = num1 + num2;
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)
示例 2:宽化类型转换
在下面的例子中,我们创建了 num1
和 num2
变量,与第一个例子中的变量相同。我们将这两个数的和存储在一个 double
类型的 sum
变量中。在输出中,我们可以观察到 double
类型的和。
package com.tutorialspoint;
public class Tester {
public static void main(String[] args) {
int num1 = 5004;
double num2 = 2.5;
double sum = num1 + num2;
System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum);
}
}
编译并运行 Tester
。这将产生以下结果:
The sum of 5004 and 2.5 is 5006.5
窄化类型转换
窄化类型转换也称为显式类型转换或显式类型转换,这是由程序员手动完成的。在窄化类型转换中,较大的类型可以被转换为较小的类型。
当程序员在编写代码时更改变量类型。我们可以使用类型转换运算符来更改变量的类型。例如,double
到 int
或者 int
到 double
。
语法
下面是窄化类型转换的语法,即手动类型转换:
double doubleNum = (double) num;
上述代码语句将会把变量转换成 double
类型。
示例:窄化类型转换
在下面的例子中,我们定义了一个 int
类型的 num
变量并为其赋值。同时,我们定义了一个 double
类型的 doubleNum
变量,并在将其转换为 double
类型后存储 num
变量的值。
接着,我们创建了一个 int
类型的 convertedInt
变量,并在类型转换为 int
后存储 double
类型的值。在输出中,我们可以观察到 double
和 int
变量的值。
package com.tutorialspoint;
public class Tester {
public static void main(String[] args) {
int num = 5004;
double doubleNum = (double) num;
System.out.println("The value of " + num + " after converting to the double is " + doubleNum);
int convertedInt = (int) doubleNum;
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