【发布时间】:2014-03-16 00:27:58
【问题描述】:
假设我有一个Map<Integer, Boolean>,我想过滤掉所有布尔值为true 的整数。这是一些代码:
for (Map.Entry<Integer, Boolean> e : map.entrySet()){
if (e.getValue() == true){ // Unboxing here
// Do something useful...
}
}
在这段代码中,Boolean-object 在每次执行 if 时都会被拆箱(如果映射非常大,这可能会出现问题)。
现在,Boolean 类提供了常量(Boolean.TRUE 和 Boolean.FALSE),它们将普通布尔值 true 和 false 表示为已装箱的版本(对吗?)。所以使用这段代码可以避免拆箱完全:
for (Map.Entry<Integer, Boolean> e : map.entrySet()){
if (e.getValue() == Boolean.TRUE){ // No Unboxing done (?)
// Do something useful...
}
}
我对这个假设是否正确?或者更糟糕的是,两个值都被拆箱以进行比较?
【问题讨论】:
-
你看过开箱码了吗?
booleanValue() { return value; },其中value是在构造函数中设置的private final boolean。换句话说,这是一种超快速的方法,如果需要可以内联。我不会费心尝试手动优化它。
标签: java boolean boxing unboxing