java基本类型
1Byte(字节) = 8bit(位)
32位系统:Word(字) = 4 Byte(字节)(一个指针,内存中占据一个单独的内存单元)
64位系统:1字 = 8 字节
在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型。(一个字节等于8个bit)
JAVA基本数据类型所占字节数是多少?(32位系统)
byte 1字节
short 2字节
int 4字节
long 8字节
char 2字节(C语言中是1字节)可以存储一个汉字
float 4字节
double 8字节
boolean false/true(理论上占用1bit,1/8字节,实际处理按1byte处理)
在栈上存储均被当做整型int处理,double、long两个int
对应范围:
类型 存储要求 范围(包含) 默认值 包装类
整 int 4字节(32位) -231~ 231-1 0 Integer
数 short 2字节(16位) -215~215-1 0 Short
类 long 8字节(64位) -263~263-1 0 Long
型 byte 1字节(8位) -27~27-1 0 Byte
浮点 float 4字节(32位) -3.4e+38 ~ 3.4e+38 0.0f Float
类型 double 8字节(64位) -1.7e+308 ~ 1.7e+308 0 Double
布尔 boolean 1/8字节(1位) true, false FALSE Boolean
int类型表示
原码:第一为符号位
反码:符号位外取反
补码:正数位原码,负数为反码+1,计算中存储都为补码
>>:带符号右移。正数右移高位补0,负数右移高位补1。
>>>:无符号右移。无论是正数还是负数,高位通通补0。 ```java
System.out.println(2<<3);//16
0000 0000 0000 0000 0000 0000 0000 0010
System.out.println(-2>>1);//-1
//-2: 1111 1111 1111 1111 1111 1111 1111 1110
//右移补1::1111 1111 1111 1111 1111 1111 1111 1111
//补码得原码,减1取反 1000 0000 0000 0000 0000 0000 0000 0001
System.out.println(-2>>>1);//0111 1111 1111 1111 1111 1111 1111 ```
浮点型及表示
类型 存储需求 bit数 取值范围 备注
float 4字节 4*8 float类型的数值有一个后缀F(例如:3.14F)
double 8字节 8*8 没有后缀F的浮点数值(如3.14)默认为double类型
float:
1符号,8指数,23尾数
公式:十进制的值=2^(指数-127)*(1+分数) (也就是 尾数+1 小数点再移动 指数-127 位)
例:
1 1000 0001 010 0000 0000 0000 0000 0000 : -5
1 1000 0000 100 1000 0000 0000 0000 0000 :-3.125
1 0111 1100 000 0000 0000 0000 0000 0000 :-0.125
-5计算
指数为129
-1*2^(129-127)*(1+1*2^-2) = -1*4*(5/4) = -5
对象占用:
一个对象大小=对象头(8/16bytes)+数据大小+补齐大小
普通对象:对象头 2字(32位8 64位16)
数组对象:对象头 3字(32位12 64位24)
HotSpot的对齐方式为8字节对齐:
(对象头 + 实例数据 + padding) % 8等于0且0 <= padding < 8
受指针压缩(vm参数:UseCompressedOops)影响
64位机器
普通对象:对象头 16->12bytes
数组对象:对象头 24->16
reference类型 8->4
对象头里都存了什么: class对象的引用、锁、数组长度等
来源–《java并发编程艺术》