Java自动类型转换和强制类型转换(通俗易懂,新手必看)
在 Java 语言中,数据类型在定义时就已经决定,但是允许用户有限度地将数据从一种类型转换为另外一个种类型,简称类型转换。
类型转换分为自动类型转换和强制类型转换两种。
自动类型转换需要满足两个条件:
事实上,自动类型转换只有在将取值范围小的变量直接赋值给取值范围大的变量的时候,即将占用内存小的数据类型转换为占用内存大的数据类型的时候,才可以使用。
Java 支持自动类型转换的类型,如下图所示。

图 1 Java自动数据类型转换图
自动类型转换的具体示例如下:
强制类型转换的语法格式如下:
接下来,通过案例来演示强制类型转换的使用:
注意,类型转换只限于该行语句,并不会影响原先变量的类型,不会影响原来数据的精度。
类型转换分为自动类型转换和强制类型转换两种。
Java自动类型转换
自动类型转换也称隐式类型转换,指不需要额外书写代码,由系统根据一定条件自动完成的类型转换。自动类型转换需要满足两个条件:
- 转换前后的数据类型必须兼容。例如,int 型与 long 型都是整型,所以彼此兼容;布尔型不能与整型进行自动类型转换,二者是不兼容的;
- 转换后的数据类型范围比转换前的大。就像两个不同的箱子,我们可以把小箱子放进大箱子里,但是不可以把大箱子放进小箱子里。
事实上,自动类型转换只有在将取值范围小的变量直接赋值给取值范围大的变量的时候,即将占用内存小的数据类型转换为占用内存大的数据类型的时候,才可以使用。
Java 支持自动类型转换的类型,如下图所示。

图 1 Java自动数据类型转换图
自动类型转换的具体示例如下:
byte b = 98; // 声明byte型变量,值为98 int a = b; // 正确,byte取值范围比int小,可以直接转换
Java强制类型转换
强制类型转换也称为显式转换,适用于把取值范围大的数据类型转换为取值范围小的数据类型,如 int 类型的值赋值给 short 类型的变量。强制类型转换的语法格式如下:
(指定转换的目标数据类型)需要转换的变量/数值;经过强制类型转换,将得到括号中的目标数据类型的数据,该数据是从指定变量名或数值中转换而来的,但不影响原来的变量名或数值。
接下来,通过案例来演示强制类型转换的使用:
public class Demo { public static void main(String[] args) { double d = 800.104; int i = (int)d; System.out.println("i=" + i); } }程序的运行结果如下:
i=800
实例中,原来变量 d 的值是 800.104,经过强制类型转换之后,精度丢失,因为浮点类型强制转换为整型,采用的是“去1法”,即无条件地舍弃小数位数字,不会进行四舍五入运算,所以该案例最后结果是 800。注意,类型转换只限于该行语句,并不会影响原先变量的类型,不会影响原来数据的精度。