首先,使用任何一个优于其他的性能优势最有可能太小而无法相关。在绝大多数情况下,代码简单性/可读性/可维护性更重要。
没有一个示例涉及创建一个布尔实例。在理论上可能的是,4中的3个将触发布尔类的初始化…并且您的应用程序将不会这样做。在这种不太可能的事件中,您的整个应用程序将分配2个不会被分配的对象。
这一个将等于或快于所有其他人,因为它只需要将寄存器设置为零。
boolean isItTrue(arg){
return true;
}
取而代之的是从内存中加载静态引用,而不是将寄存器置零。但是,在某些情况下,JIT编译器可能能够优化此操作。
Boolean isItTrue(arg){
return Boolean.TRUE;
}
在表面上,这涉及到Boolean.valueOf(true)对“box”的调用,但JIT编译器应该能够通过内联调用将其优化为与前一个相同的代码。
Boolean isItTrue(arg){
return true;
}
从表面上看,这涉及到Boolean.booleanValue(Boolean.TRUE)调用“unbox”的布尔值。这个电话可以内联。 JIT编译器也可以避免将引用加载到布尔对象并获取其值字段。
boolean isItTrue(arg){
return Boolean.TRUE
}
底线是它的4个替代方案的相对性能取决于JIT编译器在优化中的成功程度。这将取决于上下文,JIT编译器的具体情况,JVM设置等。在最佳情况下,JIT编译器(至少在理论上)可以为所有编译器生成相同(最佳)代码。