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

Advantage of returning boxed primitive values from library function

上下文

我正在查看几个 Java Redis 客户端,例如 Lettuce 和 Jedis。我看到两个库都将它们的方法定义为 return 盒装原始类型而不是直接原始类型。

例如,sadd() returns 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

问题

return装箱基元的原因可能是什么?
据我了解,装箱会增加性能开销。

对于我使用 Redis 库的库来说,保留 return 值并将其传播给库的用户有意义吗?

编辑:None 方法 return null,因此将特殊含义编码为 null 不适用于它们。

盒装基元可以在集合中使用,而常规基元不能(尽管它们仍然可以添加到相应盒装类型的集合中),并且还允许您使用引用而不是值,这样可以节省时间和 space 在某些情况下(即当引用的大小小于数据的大小时)。但是正如您所说,盒装基元会产生内存成本和性能开销。

在我看来,主要原因是能够检索 Object 而不是原始类型。例如。可以检索 null.

IntegerLong... 这样的数字包装器是大约 -128; +127 之间的缓存值。所有其他值将在内存中复制。此外,存储 Long 比存储 long.

多占用 3 倍 space

一般情况下我遵循以下规则。 如果你不需要 return null 你应该更喜欢 return 原始值而不是数字包装器。