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;
所以说对于类型的转换一定要慎重。
下一章节介绍运算符,会继续介绍类型的转换。