如何解决从库函数返回装箱的原始值的优势
上下文
我正在看几个Java Redis客户,例如Lettuce和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库的库,将其保留并返回值装箱并将其传播给该库的用户,是否有意义?
编辑:所有方法都不返回null
,因此将特殊含义编码为null不适用于它们。
解决方法
盒装原语可以在Collection中使用,而常规原语不能使用(尽管它们仍可以添加到相应盒装类型的Collection中),并且还允许您使用引用而不是值来工作,从而节省了时间和空间在某些情况下(例如,引用的大小小于数据的大小)。但是正如您所说,盒装基元会增加内存成本和性能开销。
,我认为主要原因是能够检索Object
而不是原始类型。例如。可以检索null
。
诸如Integer
,Long
...之类的数字包装器是-128; +127
之间的缓存值。所有其他值将在内存中重复。此外,存储Long
所花费的空间是存储long
的三倍多。
通常情况下,我遵循以下规则。
如果您不需要返回null
,则最好返回一个原始值,而不是返回数字包装。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。