一个 0 引发的血案

16 篇文章 2 订阅

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

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

基本类型默认值取值范围大小
byte0[-2^7, 2^7-1]8
short0[-2^15, 2^15-1]16
int0[-2^31, 2^31-1]32
long0[-2^63, 2^63-1]64
float0.0[1.4E-45,3.4028235E38]32
double0.0[4.9E-324,1.7976931348623157E308]64
char\u00000[0, 2^16-1]16
booleanfalse[true,false]8

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N3verL4nd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值