五、Java 数据类型转换
我们之前的代码中,为变量赋值时,要求数据值需要和变量的数据类型相同,但这真的是必须的吗?
让我们考虑一种情况,在数学中,我们知道 1 = 1.0 ,那么我们是否能够使用 double
类型的变量,存储数字 1 呢?
public class Hello {
public static void main(String[] args) {
double n = 1;
System.out.println("n = " + n);
}
}
运行后,我们可以得到输出结果:n = 1.0 。
从这个例子,我们可以看出,数据的类型并非一成不变,字面量 1 就从 int
变为 double
了。
数据类型的转换可以分为隐式转换(自动类型转换)和显式转换(强制类型转换)两种。
1 隐式转换(自动类型转换)
上面的例子,就是一种隐式转换,因为我们没有刻意做什么,转换就发生了。
如果以下 2 个条件都满足,那么将一种类型的数据赋给另外一种类型变量的时,将执行自动类型转换(automatic type conversion)。
两种数据类型彼此兼容
目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)
在我们已经学过的数据类型中,隐式转换规则如下:
数值型数据的转换:byte→short→int→long→float→double。
字符型转换为整型:char→int。
2 显式转换(强制类型转换)
有时候,我们必须逆隐式转换的顺序进行转换。
比如,我们去买东西,应付 2.01 元,这时,商家往往会 “抹零” ,实付 2 元。抹零的操作,在代码中,我们能够写成这样:
public class Hello {
public static void main(String[] args) {
int n = 2.1;
System.out.println("n = " + n);
}
}
但这样写,我们会得到报错:需要类型为 int ,但提供的类型为 double 。
这说明,这种转换不能自动发生,我们需要显式进行转换。即:在需要被转换的数据前,用括号明确指出希望转换成的数据类型。
正确代码如下:
public class Hello {
public static void main(String[] args) {
int n = (int)2.1;
System.out.println("n = " + n);
}
}
输出:n = 2