在程序中,当把一种数据类型的值赋给另一种数据类型的变量时,需要进行数据类型转换。自动类型转换也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显式地进行声明。
当把一个类型取值范围小的数值直接赋给另一个取值范围大的数据类型变量时,系统就会进行自动类型转换,否则需要进行强制类型转换。
Java中的自动类型转换就好比将小瓶中的水倒入到大瓶的换装过程。我们将小瓶水倒入到大瓶中时,由于小瓶的容量比大瓶的容量小,所以倒入的水永远不可能溢出大瓶。
同样,在Java中,将取值范围小的数据类型的变量值赋值给取值范围大的数据类型的变量时,程序也不会出现任何问题。
Java中支持的不同数据类型之间的自动转换如图所示:
从上图可以看出,Java中取值范围小的byte、short、char等类型数据都可以自动转换为取值范围大的数据类型(如int类型),并最终都可以自动转换为双精度浮点数类型。
例如:
byte b=3;
int x=b; //程序把byte类型的变量b转换成了int类型,无须特殊声明
double y=x; //将int类型的变量x转换成double类型,无须特殊声明
强制转换类型语法格式举例如下:
int i = 21;
double d = 21.333;
//自动转换类型
double i2 = (double) i;//完整语法格式
double i3 = i;//省略语法格式
//强制转换类型
int d2 = (int) d;//只能这样转换,没有省略格式
数据类型按照容量大小排序为:
注意:
(1)byte,short分别与char两两之间转换,不能使用自动类型转换。
(2)byte,short分别与char两两之间转换,只能使用强制转换。但是这样很容易造成精度丢失,导致转换数据不准确!!!因为他们之间转换,都会首先转换为int类型,再转换为他们之间的其他类型数据。然而他们本身存储数据范围很小,大于128就会转换出错。所以谨慎使用!!!
(3)byte与short之间,既可以使用自动类型转换,也可以使用强制类型转换。因为他们本质都属于整型数据,只是存储数据范围不同。
(4)boolean类型不能与其它数据类型运算,否则报错。
(5)String类型是引用类型数据,也不能与这8种基本数据类型转换,否则报错