从库函数返回装箱的原始值的优势

问题描述

上下文

我正在看几个Java Redis客户,例如Lettuce和Jedis。我看到这两个库都定义了它们的方法来返回装箱的原始类型,而不是直接的原始类型。

例如,sadd()返回Long而不只是longhttps://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库的库,将其保留并返回值装箱并将其传播给该库的用户,是否有意义?

编辑:所有方法都不返回null,因此将特殊含义编码为null不适用于它们。

解决方法

盒装原语可以在Collection中使用,而常规原语不能使用(尽管它们仍可以添加到相应盒装类型的Collection中),并且还允许您使用引用而不是值来工作,从而节省了时间和空间在某些情况下(例如,引用的大小小于数据的大小)。但是正如您所说,盒装基元会增加内存成本和性能开销。

,

我认为主要原因是能够检索Object而不是原始类型。例如。可以检索null

诸如IntegerLong ...之类的数字包装器是-128; +127之间的缓存值。所有其他值将在内存中重复。此外,存储Long所花费的空间是存储long的三倍多。

通常情况下,我遵循以下规则。 如果您不需要返回null,则最好返回一个原始值,而不是返回数字包装。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...