一字节=8位
类型 | 字节长度 | 二进制位数 | 取值范围 | 取值范围 |
int | 4字节 | 32 | -2 147 483 648 ~ 2 147 483 647 | [- 2^31, 2^31 - 1] |
short | 2字节 | 16 | -32 768 ~ 32 767 | [- 2^15, 2^15 - 1] |
long | 8字节 | 64 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 | [- 2^63, 2^63 - 1] |
byte | 1字节 | 8 | -128 ~ 127 | [-2^7~2^7-1] |
float | 4字节 | 32 | 大约±3.402 823 47E+38F(6~7位有效数字) | |
double | 8字节 | 64 | 大约±1.797 693 134 862 315 70E+308(15位有效数字) | |
char | 2字节 | 16 | ||
boolean | 1字节 | 1 |
四个整数类型:
因为整数很多,范围也不一样,有大有小,为了节约内存开销,就有了四个整数类型
进制:
任何数据在计算机中都是以二进制的形式存在,一个整数在内存中也是二进制,但是使用一大串的1或0组成,表示起来很不清晰,不方便,为了解决这一问题,就通过进制转换来实现 ,如用三个二进制位表示一个八进制,四个二进制位表示一个16进制
例如:111--->7,1111--->15
表达式中的自动类型提升
在运算时,如果有两个数据类型,首先会将两个数据类型提升为同一种数据类型进行计算,如:
byte b= 3; //3是int类型,为什么这个不报错,因为3是常量,在赋值时,会事先有判断是否在此数据类型的取值范围
b=b+2; //2是int类型,b是byte类型,需要将b提升为int类型,相加之后为int类型,在赋值给b(byte)会报错
System.out.println('A'+0); /会将字符类型提升为int类型,A就变成了65(ASCII码)