查看java.util.OptionalInt
的源代码,一个可选的int由int value
和boolean 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/