一、自动类型转换
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
自动类型转换的特殊情况:整数类型默认是int类型,可以将整型常量直接赋值给 byte、short、char 等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。
/**
*测试自动类型转化
*/
public class TestTypeAutoConvert{
public static void main(String[] args){
//容量小的类型可以自动转化成容量大的类型
int a=2345;
long b=a;
//int c=b;//long类型不能自动转化成int类型
double d=b;
float f=b;
//特例:整型常量是int类型,但是可以自动转成:byte/short/char,只要不超过对应类型的表数范围
byte h1=123;
//byte h2=1234;//1234超过了byte的表数范围
char h3=97+25;//将两个int类型的数字相加,值赋给char类型的变量
System.out.println(h3);
}
}
二、强制类型转换
强制类型转换,又称为造型(cast),用于强制转换数值的类型,可能损失精度。
当将一种类型强制转换成另一种类型,而又超出了目标类型的表数范围,就会被截断成为一个完全不同的值。
/**
*测试强制类型转化
*/
public class TestTypeConvert{
public static void main(String[] args){
double a=31.44;
int b=(int)a;//结果为31,浮点型数转化为整型数的时候不会四舍五入,而是会舍去小数部分
System.out.println(b);
//如果强制类型转化超出对应数据类型的表数范围,则会转换成一个完全不同的值
byte c=(byte)300;
System.out.println(c);
}
}
注意:不能在布尔类型和任何数值类型之间做强制类型转换!