一、8种基本数据类型以及占用内存空间大小
boolean 1byte或4byte
byte 8bit/1byte
char 16bit/2byte
short 16bit/2byte
float 32bit/4byte
int 32bit/4byte
long 64bit/8byte
double 64bit/8byte
二、自动类型转换
2.1、类型自动提升
占用内存小的数据类型可以自动转换成占用内存大的数据类型。
允许类型自动提升的顺序如下:
byte-->short-->int-->long-->float-->double或者char-->int-->long-->float-->double
具体规则:
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。
测试用例1:
double d = 1.0;int i = 1;
// int sum = i+d;//这行代码放开编译会报错,提示Type mismatch: cannot convert from double to intdouble sum = i+d;//会先将i的数据类型自动提升为double,然后两个double类型做运算,返回也是double类型
测试用例2:
float d = 1.0f;long i = 1;
// long sum = i+d;//这行代码放开编译会报错,提示Type mismatch: cannot convert from float to longfloat sum = i+d;//会先将i的数据类型自动提升为float,然后两个float类型做运算,返回也是float类型
通过上面的两个测试用例证明我们的规则是正确的。
2.2、类型自动强转
占用内存大的数据类型可以自动强转成占用内存小的数据类型。
下面这几种情况会先自动提升,然后自动强转
测试用例3:
byte b = 127;byte b2 = ++b;//先执行++b,返回int类型,然后强转成byte类型赋值给b2System.out.println(b2);//输出-128
测试用例4:
byte b = -128;b += -128;//先执行b+(-128),返回int类型,然后强转成byte类型赋值给bSystem.out.println(b);//输出0