<分区>
我看到了下面的代码,想知道编码器的意图。与自动装箱的性能有关吗?
map.put("doesntMatter", Boolean.TRUE);
他本可以做到:
map.put("doesntMatter", true);
做第一个有什么好处?
标签 java autoboxing
<分区>
我看到了下面的代码,想知道编码器的意图。与自动装箱的性能有关吗?
map.put("doesntMatter", Boolean.TRUE);
他本可以做到:
map.put("doesntMatter", true);
做第一个有什么好处?
最佳答案
我写了一个例子:
public class Demo {
Map<String, Boolean> map = new HashMap<>();
void primitive() {
map.put("a", true);
}
void object() {
map.put("b", Boolean.TRUE);
}
}
看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
和 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
结论:
当使用原语时,有一个调用 Boolean.valueOf()
的额外步骤,但如果您经常运行那段代码,JIT 编译器会完成它的工作并优化它。
关于java - Boolean.TRUE 而不是 true 是自动装箱优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17241869/