Java trie节点布尔值vs布尔值

时间:2015-04-11 10:57:43

标签: java boolean

我正在创建trie节点类,其中包含具有逻辑类型的字段,我不知道最好使用boolean或Boolean。

我知道布尔的一个实例需要16个字节,4个字节需要它在32位VM中引用。但布尔值有常量Boolean.TRUE和Boolean.FALSE,可用于空间优化。因此,应用程序需要4 * N + 32字节,其中N是节点数,是吗?

到目前为止,我知道布尔值在32位VM中需要4个字节(在数组中它优化为每个元素1个字节)

但是我可以使用这样的代码

boolean EOW = Boolean.TRUE;

但需要多少空间以及需要多少时间进行自动装箱/收箱?

那么用什么来优化空间使用和时间会更好? 你能回答我在64位虚拟机上有多少空间吗?

3 个答案:

答案 0 :(得分:3)

只需将原始类型booleantruefalse一起使用即可。原始类型占用的内存较少,性能更好,并且是零安全的。

答案 1 :(得分:3)

而不是:

boolean EOW = Boolean.TRUE;

请写下:

boolean EOW = true;

没有理由使用Boolean.TRUE,无论如何都会自动取消装箱原始值true,使用值{{1}会更高效,更简洁直接。

只有在有充分理由的情况下才使用包装类,例如true - 否则,请使用Boolean等原始类型。使用包装器的一个原因是当您需要在集合中存储值(例如boolean)时 - 集合类只能保存对象而不是原始值,因此您必须使用包装类在那种情况下。

使用ArrayList对象永远不会比使用Boolean原始值更有效。

请注意,原始值只是,而不是对象。如果在代码中使用值boolean十次,则内存中将不会有十个重复对象。

答案 2 :(得分:0)

我希望您粘贴的确切代码优化为boolean EOW = true;,因此根本不应取消装箱,但如果没有这样的优化,那么您&# 39; ll没有任何受影响的内存,因为你使用静态字段,它只会被初始化一次。尽管如此,您仍然会在非正式运行方法booleanValue()上丢失一个操作,这将只返回存储的值。实际上,我不知道为什么你会想要这样的表达。