自动转换
转换规则就是小数据类型变成大数据类型,但大数据类型的精度有时会被破坏,如下:
// 定义各种数据类型
int i = 123;
char c1 = 22; // 表示一个整数
char c2 = 'c';
byte b = 2;
// 自动转换的数据类型
int n = b;
long l = i;
强制转换
明明不能自动转换,而强制性地进行转换。
// 定义数据类型
int i = 22;
long L = 33;
// 强制转换
char c = (char)i;
int n = (int) L;
注意:强制转换类型是会丢失精度的,经常会发生转换之后数据发生变换的情况。但是在一些必要的地方又必须进行强制类型转换。所以要谨慎和准确地使用强制类型转换。
隐含转换
隐含转换和自动转换很相似,Java 虚拟机根据数据类型的位数来判断此数据类型是否能装载此数据,如果能,Java 就默认进行了转换,如下:
byte b = 111;
int i = 222;
byte c = (byte) i;
上面语句中有两个转换,一个是 111 转换成 byte 类型的数据库,因为 byte 类型的数据位数能装下 111,所以能进行转换,这就是隐含转换。把值为 222 的变量 i 转换成 byte 类型的变量 c 就不能进行隐含转换,因为能进行隐含转换的只能是常量而不能是变量。