一、基本数据类型长度
byte:一个字节,8位,有符号
short:两个字节,16为,有符号
char:两个字节,16位,无符号
int:4个字节,32位,有符号
float:4个字节,32位,有符号
long:8个字节,64位,有符号
double:8个字节,64位,有符号
boolean:比较特殊,1个字节,由于其值的特殊性,不能与任何基本类型进行转换
二、向上类型转换(不考虑char类型,char类型后面一节单独说)
何为向上?
byte->short->int->long->float->double
只要是要转换的类型等级比本身类型等级高,不需要强制类型转换,而且,内存中所占长度也会随之提升
但是,整数转换为浮点数有可能会损失精度
三、向下类型转换
向下类型转换,均需要强制转换
注意:在给基本类型赋初值的时候,整数默认是int类型,浮点数默认是double类型
所以,
float a = 5.0; //编译器会报错,因为5.0默认是double类型,不经过强制转换不可以转换为float类型
float a = (float)5.0; //正确
float a = 5.0f; //正确,这时候的5.0是float类型
但是,
byte a = 6; //这种写法不会报错,因为对于默认为int类型的数据,将其赋给比int类型等级低的类型k时(byte、char、short),JVM会自动判断该值是否超过了k类型的取值范围,如果超过了,则报错,如果没有超过,则将该int值隐式地强制转换为k类型并赋值。
所以;
char a = 5; // 不会报错
byte a = 1000; // 报错,因为1000超过了byte所能存储的最大范围
四、char的独特性
虽然char类型内部存的也是数字(ASCII码),但是,有一点不同:byte、short、int、float、double都是有符号的变量类型,char是无符号的变量类型,所以,即使是byte向char类型转换(升级)、short向char类型转换(同级)均需要强制转换,因为有符号和无符号的区别。
网友评论