基本类型的类型转换
小到大(隐式转换)
小类型指向大类型
byte–>short–>int–>long–>float
char–>int–>long–float
int–>long–>float–>double
例如:
byte i = 120;
int j = i;//小转大,右面的i是小类型,给左面的j大类型赋值,可以直接使用
float f = 2.1f;
double d = f;//可以执行
大到小(显示转换)
容量大的类型转换为容量小的类型时必须使用强制类型转换。
例如:
int m = 300;
byte n = (byte)m;//大转小,右边m给左边的n小类型不可以直接赋值,需要强制类型转换
1、转换过程中可能导致溢出或损失精度。
例如:int i = 128; byte b = (byte)i;//打印的结果是-128
由于byte类型是8位,最大值为127,所以当int强制转换为byte类型时,值128就会导致溢出。
2、浮点数到整数的转换是通过舍去小数得到,并非四舍五入。
例如:float f = 18.6f; int a2 = (int)f; //打印结果为18
3、不能对boolean类型进行类型转换。
总结:小转大,直接转。大转小,强制转。浮点变整数,小数没
运算规则
1、计算结果的数据类型,与最大数据类型一致
System.out.println(3/2);//输出1,int/int,得到的结果类型还是int
System.out.println(3/2d);//输出1.5,得到的结果是double
2、byte,short,char三种比int小的整数,运算时会先自动转换为int
byte a = 1;
byte b = 2;
byte c = (byte)(a+b);//a+b会自动提升成int类型,右面的运算结果就是int大类型。不可以直接给左面的byte小类型赋值,需要强转。
3、整数运算溢出
例如:计算光运行一年的长度(3亿米)
//由于做了大的整型数据的运算,会超出int取值范围。解决方法:把整数提升成long类型。
System.out.println(300000000L * 60 * 60 * 24 * 365);
4、浮点数运算不精确
5、浮点数的特殊值