1、基本类型自动转换
基本类型的自动转换是比较好理解的,就是值域小点往值域大的类型转换,这个过程中可以自动转换,
自动转换方式
byte----->short---->int----->long----->float------>double
char--->
布尔类型不能转换
public class AutoTypeCasting { public static void main(String[] args) { //声明所有基本变量 //byte byte byteValue=56; //short short shortValue=666; //int int intValue=6666; //long long longValue=66666; //float float floatValue=66666.66f; //double double doubleValue=666666.6666; //char char charValue='a'; /* 1.首先由byte向上自动转换 */ //short short shortValue1=byteValue; //int int intValue1=byteValue; //long long longValue1=byteValue; //float float floatValue1=byteValue; //double double doubleValue1=byteValue; /* 2.首先由short向上自动转换 */ //int int intValue2=shortValue; //long long longValue2=shortValue; //float float floatValue2=shortValue; //double double doubleValue2=shortValue; /* 3.首先由int向上自动转换 */ //long long longValue3=intValue; //float float floatValue3=intValue; //double double doubleValue3=intValue; /* 4.首先由long向上自动转换 */ //float float floatValue4=longValue; //double double doubleValue4=longValue; /* 5.首先由float向上自动转换 */ //double double doubleValue5=floatValue; /* 6.首先由char向上自动转换 */ //int int intValue6=charValue; //long long longValue6=charValue; //float float floatValue6=charValue; //double double doubleValue6=charValue; }}
上面的类型在转换过程中不会出现任何的错误,都会自动转换,但是如果反过来转换就会报错,必须强制转换才行,并且会损失精度
2.强制类型转换
强制类型转换就是值域大的往值域小的类型转换,这个过程必须强制转换,并且转换过程中可能造成精度缺失,要慎重转换。
我们在前面说过整型默认是int型,浮点型默认是double型,然后就开始纠结了,默认是int型,那么我们声明
byte=88;
short=99;
float=100.01f;
为什么不报错呢,按理说88是整型赋值给比其值域小的类型要报错啊,但是没有报错。
这就涉及到Java的存储管理了,我们可以这么理解,声明变量的时候比如byte
首先会开辟一个byte类型的空间一个字节,即8位,然后将常量(字面量)放进这个空间,若超出范围就会报错,若不超出范围就不会报错。
当然也可以把每个基本类型变量比喻成大小不同的瓶子,往里面装水,只要水不超过瓶子口,即装的水的容量在瓶子容量范围之内,水就不会溢出。
至于超出其范围的就需要强制转换
/*这种情况不会丢失精度*/int intValue=56;byte byteValue=(byte)intValue;/*下面的情况会丢失精度*/double doubleValue=99999999.99999;int intValue1=(int)doubleValue;
所以说对于类型的转换一定要慎重。
下一章节介绍运算符,会继续介绍类型的转换。