查看java.util.OptionalInt的源代码,一个可选的int由int valueboolean isPresent组成。获取空的可选int的唯一方法是通过OptionalInt.empty()方法,该方法返回OptionalInt.EMPTY,它是所有空的可选int的公共(public)实例。

如果是这种情况,那为什么将isPresent()方法实现为return isPresent而不是this == EMPTY并通过摆脱isPresent字段来减少内存使用量呢?

最佳答案

这是实现的选择,唯一能给出明确答案的人就是编写实现的人。

但是很可能这是使代码的可读性,清晰度和可维护性超过内存微优化的选择。

担心 boolean 值在包装int的对象中占用的空间确实没有多大意义。如果该空间相关,则考虑对象 header 至少需要8个字节(在32位JVM上,至少在64位上),因此不应该首先使用OptionalInt(或Java)。

Java不是用于编写受内存限制的应用程序,而是用于编写易于维护的代码。并且将isPresent()用作isPresent的getter易于阅读,重构时出错更少,并且符合已建立的Java编码惯例。

附带说明:由于Java对象是8字节对齐的,因此在删除isPresent时,它甚至可能不会使类变小。正如Eugene在评论中指出的那样,实际上它确实增加了大小,因为isPresent字段恰好位于边界上,然后又添加了7个字节用于填充。

关于java - OptionalInt.isPresent字段的用途是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52249824/

10-11 10:38