一、自动类型转换(隐式类型转换)
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为 同一类型,然后进行运算。
转换从低级到高级。
自动转换有以下规律:
- 小的类型自动转化为大的类型
- 整数类型可以自动转化为浮点类型,可能会产生舍入误差
- 字符可以自动提升为整数
二、强制类型转换(显式类型转换)
格式:(type)value:type是要强制类型转换后的数据类型
注意:
- 强制类型转换可能导致溢出或损失精度
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
//-----------------自动类型转换(隐式转换)-----------------
//小的类型自动转化为大的类型
byte byteValue1=110;
int intValue1=byteValue1+50;
System.out.println(intValue1);
//整数类型可以自动转化为浮点类型,可能会产生舍入误差
//Float和Double提供了快速的运算,然而问题在于转换为二进制的时候,有些数字不能完全转换,只能无限接近于原本的值
float floatValue1=2+10f;
float floatValue2=floatValue1-11.9f;
System.out.println(floatValue2);
//字符可以自动提升为int
char charValue1 ='a';
int intValue2=charValue1+10;
System.out.println(intValue2);
//-----------------强制类型转换-----------------
//强制类型转换可能导致的溢出
byte d = (byte) 129;//Byte占1字节, 8位(bit) 范围:-2^7 到 2^7-1 默认值是 0
System.out.println(d);//超出范围时,就会溢出
//强制类型转换可能导致的损失精度
System.out.println(Long.MAX_VALUE);
double floatValue3=(double) Long.MAX_VALUE;
System.out.println(floatValue3);
//在把容量大的类型转换为容量小的类型时必须使用强制类型转换
int intValueA=120;
byte byteValueB=(byte) intValueA;
System.out.println(byteValueB);
//浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
int intValue3=(int)23.7;
int intValue4=(int)-23.7;
System.out.println(intValue3);
System.out.println(intValue4);