boolean 类型不可以转换为其他的数据类型
-
整形 字符型 浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
- 容量小的类型自动转换为容量大的数据类型;数据类型按容量大小排序为:
byte/short/char < int < long < float < double
byte/short/char之间不会相互转换,他们三者在计算时首先会转换为int类型
- 容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意
- 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算
- 实数常量(如:1.2) 默认为
double
类型 - 整数常量(如:123) 默认为
int
类型.
- 容量小的类型自动转换为容量大的数据类型;数据类型按容量大小排序为:
int i1 = 123;
int i2 = 345;
double d1 = (i1+i2)*1.2;//系统将转换为double类型运算
float f1 = (float)((i1+i2)*1.2);//需要加强制转换符
byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1+b2);//系统将转换为int类型运算,需要强制转换符
byte b4 = 67;
byte b5 = 89;
byte b6 = (byte)(b4+b5);//byte最大表示128,byte1个字节,int4个字节,强制转换会把int多的三个字节剪掉
double d2 = 1e200;
float f2 = (float)d2;//会产生溢出
System.out.println(f2);//infinite
float f3 = 1.23f//必须加f
long l1 = 123;
long l2 = 300000000000L;//必须加L
float f = l1+l2+f3;//系统将转换float型运算
long l = (long)f;//强制将转换舍去小数部分(不是四舍五入)
练习
int i = 1,j;
float f1 = 0.1;//需要加f
float f2 = 123;
long l1 = 12345678, l2 = 99999999999;//l1没问题,l2超出int最大值范围,必须加L
double d1 = 2e20,d2 = 124;
byte b1 = 1, b2 = 2, b3 = 129;//b3超出byte最大值范围
j = j+10;//变量要先声明再赋值,需要给j先赋值
i = i/10;//没问题,值为0
i = i*1.2;//需要强转
char c1 = 'a', c2 = 125;
byte b = b1-b2;//运算出来为int类型,需要强制转换符
char c = c1+c2-1;//需要强制转换符
float f3 = f1+f2;
float f4 = f1+f2*0.1;//需要强制转换符
double d = d1*i+j;
float f = (float)(d1*5+d2);