第七讲
注意:
1、boolean类型不可以转换为其他的数据类型,其他的数据类型也不可以转换为Boolean类型。
2、整型、字符型、浮点型的数据在混合运算中相互转换,转换时遵守:
(1)容量小的类型自动转换为容量大的数据类型,数据类型按容量大小排列的顺序为:byte,short,char<int<long<float<double(其中byte,short,char之间不会相互转换,他们三者在计算时首先转回int型)
(2)容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出,使用时要格外注意。
(3)有多种类型的数据混合运算时,系统首先自动的将所有数据转换为容量最大的那种数据类型,然后在进行计算。
(4)实数常量默认为double
(5)整数常量默认为int
请看下边代码的解释:
int i1=123;
int i2=456;
double d9=(i1+i2)*1.2;//系统将转化为double型运算
float f9=(float)((i1+i2)*1.2);//需要加强制转换符,因为默认是double型进行运算的
byte b5=67;
byte b6=89;
byte b7=(byte)(b1+b2);//系统将转换为int型运算,需要强制转换符
double d8=1e200;
float f5=(float)d8;//会产生溢出
System.out.println(f5);
float f6=1.23f;//必须加f
long l9=123;
long l8=2000000000L;//必须加L
float f12=l9+l8+f6;//系统将转换为float型运算
long l=(long)f12;//强制转换会舍去小数部分(不是四舍五入)
请看下边的程序中的错误:
public static void main(String[] args) {
int i=1,j;
long l1=12345678,l2=8888888888l;//第一个int 能装下,第二个装不下所以必须要加L
float f1=(float)0.1;//两种方法,一种是0.1前面加个float,第二是0.1后边加f
float f2=123;
double d1=2e20,d2=124;
byte b1=1,b2=3,b3=129;//超出
j=j+10;//变量要先赋值才能用
i=i/10;//结国是0,做计算是int型,0.1装为int型为0
i=i*0.1;//这个做完是double型,所以报错
char c1='a',c2=125;//没有问题,直接asci码赋给它
byte b=b1+b2;//首先做运算的时候是int型,然后赋值给byte,就会报错
char c=c1+c2-1;//有问题,计算时转为int,再赋值给char,会出错
float f3=f1+f2;
float f4=f1+f2*0.1;//有问题,后边计算时是double,转为float强制转换
double d=d1*i+j;
float f=(float)(d1*5+d2);
}
//上边改为正确的是下边所示的
int i=1,j=12;
long l1=12345678,l2=8888888888L;
float f1=(float)0.1; //0.1f,这样写与前面的区别很大,因为前边的0.1是double型,后边的0.1是float
float f2=123;
double d1=2e20,d2=124;
byte b1=1,b2=3,b3=124;
j=j+10;
i=i/10;
i=(int)(i*0.1);
char c1='a',c2=125;
byte b=(byte)(b1+b2);
char c=(char)(c1+c2-1);
float f3=f1+f2;
float f4=(float)(f1+f2*0.1);
double d=d1*i+j;
float f=(float)(d1*5+d2);