基本数据类型转换
在8种基本数据类型中,布尔型是不可以和其他数据类型进行运算的,所以这里不对布尔型进行试验。在之前的博文中说过,java是一门强类型的语言。所谓的强类型就是指java语言对数据类型要求严格,不同类型数据不可以进行运算。但是试想一下,默认的int类型,比如5,和一个double类型的3.3进行相加运算,如果不被允许就有些天理难容了。那么一定存在一种规律,让不同类型之间可以互相转换然后进行运算,通过一些代码来总结出规律!
byte,shor,char
public class TestVar6 {
public static void main(String args[]) {
byte b1=111-33;//注意右侧的赋值,是两个默认的int计算结果
System.out.println(b1);//78
/*
byte b2=127+1;
byte类型的表数范围是-128~127
这里会报错,同样也是两个int相加赋值,但是超出了byte类型的表数范围
*/
short sh1=33333-3333;
System.out.println(sh1);//30000
/*
short类型的表数范围为正负30000
运算方式与byte类型基本一致,只需要注意表数范围
*/
int num1=88+'a';
System.out.println(num1);//185,'a'=97;这里的char类型'a'在Unicode编码表中对应的就是97.
char ch1='a'+88;
System.out.println(ch1);//i
/*
byte、short、char这三种类型比较特殊,在运算中,都是以int的方式出现,只要不超出他们的表数范围,会自动转换成int类型进行计算
*/
}
}
int,long,double,float
public class TestVar6 {
public static void main(String args[]) {
long l1=900000+'a'+3;
System.out.println(l1);//900100;
double d1=3.2+2+'a'+90L;
System.out.println(d1);//192.2
float f1=3.2f+2+'a'+90L;
System.out.println(f1);//192.2
/*
一些报错的情况:
int i=3.3+5; //这里不能把double类型赋值给int
float f2=44.4+3.5f; //double + float的结果为double,不可以赋值给float类型
long l2=3.3f+3.4f;
long l3=5.5+5.4; //long类型不可以接收float和double
*/
}
}
强制转换
如果想让一个int类型变量强行去接收一个double数据,或者说让一个低精度类型变量接收一个高精度类型的值,需要怎么做呢?看一段代码:
public class test{
public static void main(String args[]){
double d=8.8;
int i=(int)(d+1);//强制转换
System.out.println(i);//输出了9
}
}
发生了什么? 8.8+1=9? ~这就是强制转换的弊端。在运算的过程中,由于高精度数据强行转换成了低精度,导致精度丢失,最后的结果就不会像我们想象的那么准确了。
结论:
在运算中,有一个由低到高的等级:
byte,short,char----->int---->long ----->float---->double
这些类型参与到运算表达式中去的时候,整个运算式按照级别最高的进行计算。
其余的要转化成为最高类型的计算。
强制转换可以让高精度类型强行转换为低精度,但是会丢失一部分数据。