Boolean.TRUE 而不是 true 是自动装箱优化吗?

Sur*_*ani 2 java autoboxing

我看到以下代码,想知道编码器的意图。它是自动装箱的相关性能吗?

map.put("doesntMatter", Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)

他本可以这样做:

map.put("doesntMatter", true);
Run Code Online (Sandbox Code Playgroud)

做第一个有什么好处吗?

jlo*_*rdo 5

我写了一个例子:

public class Demo {

    Map<String, Boolean> map = new HashMap<>();

    void primitive() {
        map.put("a", true);
    }

    void object() {
        map.put("b", Boolean.TRUE);
    }
}
Run Code Online (Sandbox Code Playgroud)

看看字节码 primitive()

 0 aload_0
 1 getfield #17 <Demo/map Ljava/util/Map;>
 4 ldc #24 <a>
 6 iconst_1
 7 invokestatic #26 <java/lang/Boolean/valueOf(Z)Ljava/lang/Boolean;>
10 invokeinterface #32 <java/util/Map/put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;> count 3
15 pop
16 return
Run Code Online (Sandbox Code Playgroud)

和字节码 object()

 0 aload_0
 1 getfield #17 <Demo/map Ljava/util/Map;>
 4 ldc #39 <b>
 6 getstatic #41 <java/lang/Boolean/TRUE Ljava/lang/Boolean;>
 9 invokeinterface #32 <java/util/Map/put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;> count 3
14 pop
15 return
Run Code Online (Sandbox Code Playgroud)

结论:

使用原语时,有一个额外的步骤调用Boolean.valueOf(),但是如果您经常运行那段代码,JIT 编译器将完成它的工作并对其进行优化。

  • @Dgrin91:`Map&lt;String, boolean&gt;` 无法编译。我写了一个简短的结论。 (3认同)