大小(位)(一般都是8的倍数)
byte 8
short 16
int 32
long 64
float 32
double 64
char 根据编码来进行决定,最少8,有16,24,32
boolean 32
注意
8种基本类型全都不安全,计算的时候需要注意。
所有的其他类型都是由8种基本类型组装起来的,称为引用类型。
可以用byte类型来表示其他7种类型,例如int类型,可以使用4个byte组合表示。
CPU和内存传输时一般为36—41位,long类型和double类型都是64位,所以需要分2次传输,2次之间有被切换线程的危险造成并发不安全。
在多线程并发情况下,如果数据太短,在CPU内部高速缓存行里存储时,容易互相锁定,如A和B存放在一起时,若CPU想读A时,B容易被其锁定,影响到了并行计算的能力。所以BOOLEAN拓展到了32位,有利于加快CPU速度。
CPU的高速缓存行的基本的存储单元在被读取时会整个被锁定,所以数据要一定大,自己独占一个存储单元。
Java里都是有符号类型,和C不同。
flaot和int的区别对比
float类型和int间距不同,float范围要比int大很多。
float类型间距,距离0越近,表示的精度越高,距离越远,精度越差,当超过2^23
次方的时候,精度开始大幅度落后int类型;小于2^23次方的时候,float精度高于与int。
int=符号位+数值位
float =符号位1 + 阶位8(都表示正数) + 数值位23=阶位*数值位
float范围
float =符号位1 + 阶位8(都表示正数) + 数值位23=阶位
∗
*
∗ 数值位
求flaot表示范围——阶位为8位,即最大可表示255,先求得中间数128,(255-中间数)数值位求的float的表示范围。因为浮点数还要表示小数,所以阶要能表示成负的,但因为阶位表示的都是正数,所以要用255/2求一个中间数,以此来划分正数和负数。128以上表示是整数,127以下表示是负数。
所以 float的范围为-2128 ~ +2128,也即-3.40E+38 ~ +3.40E+38;
同理double =符号位1 + 阶位11 + 数值位52=阶位* 数值位
double的范围为-21024 ~ +21024,也即-1.79E+308 ~ +1.79E+308。
范围:
byte -128 ~ 127
short -215 ~ +215-1 (减1是减去一个0)
int -231 ~ +231-1
long l=34324345435L -263 ~ +263-1
整数范围一定要在范围内使用,超出后可能导致符号改变。
当进行精确计算时,整数类型和浮点数类型都要慎用,因为8种基本类型类型都不是很精确很安全。
有效位指整数位和小数位加起来的总位数
float(有效位6—7)
double(有效位15—16)