上下文
我正在研究几个javaredis客户机,比如莴苣和jedis。我看到两个库都定义了返回装箱基元类型而不是直接基元的方法。
例如, sadd()
退货 Long
而不仅仅是 long
. https://lettuce.io/lettuce-4/release/api/com/lambdaworks/redis/api/sync/redissetcommands.html#sadd-k-v-
和
https://github.com/xetorthio/jedis/blob/d7aba13a8b65e66dedc01c51b73e3794cbe68a62/src/main/java/redis/clients/jedis/commands/binaryjediscommands.java#l139
问题
返回装箱原语的原因是什么?
据我所知,拳击增加了性能开销。
我的库使用redis库,保存和返回值并将其传播给库的用户有意义吗?
edit:没有一个方法返回 null
,因此将特殊含义编码为null不适用于它们。
2条答案
按热度按时间flvtvl501#
装箱原语可以在集合中使用,而常规原语不能(尽管它们仍然可以添加到相应装箱类型的集合中),并且还允许您使用引用而不是值,这在某些情况下(即当引用的大小小于数据的大小时)节省了时间和空间。但正如您所说,装箱原语会产生内存和性能开销的成本。
2uluyalo2#
在我看来,主要原因是有能力检索
Object
而不是原语类型。e、 g.可以检索null
.数字 Package 器,如
Integer
,Long
... 缓存值是否介于-128; +127
. 所有其他值将在内存中复制。而且要储存Long
它占用的空间是商店的3倍多long
.一般情况下,我遵循以下规则。如果你不需要回来
null
您应该更喜欢返回原语值而不是数字 Package 器。