一个馒头引发的血案

本想起 一个 0 引发的血案 ,本着无事不调侃的性取向,索性改为一个馒头引发的血案。


越来越觉得在 Java 中,包装类型的产生完全是由于与其对应的基本类型无法表达"没有设置该值"、"该值无效"等语境。

以基本类型作为类的成员变量,都有默认值的概念。

基本类型 默认值 取值范围 大小
byte 0 [-2^7, 2^7-1] 8
short 0 [-2^15, 2^15-1] 16
int 0 [-2^31, 2^31-1] 32
long 0 [-2^63, 2^63-1] 64
float 0.0 [1.4E-45,3.4028235E38] 32
double 0.0 [4.9E-324,1.7976931348623157E308] 64
char \u00000 [0, 2^16-1] 16
boolean false [true,false] 8

对于一个基本类型,你甚至无法区分默认值是"无效的",还是用户指定的有意义的。所以才出现了引用类型的 null。

而对于基本类型,想要表达这种"无效的"语义,你就得使用多使用一个二进制位用来区分,如二进制1:有效的;二进制0:无效的。

对于 8 个基本类型的数据需要额外存储一个 byte。
对于 16 个基本类型的数据需要额外存储一个 short。
等等。

这就是 Thrift 序列化中 __isset_bitfield 存在的意义。
在这里插入图片描述
超过 64 个基本类型属性就需要 BitSet 了。

发布了778 篇原创文章 · 获赞 323 · 访问量 209万+

猜你喜欢

转载自blog.csdn.net/lgh1992314/article/details/105398114