首先,使用任何一个的性能优势都比使用其他任何一个都大可能太小而无法相关。代码简单性/可读性/可维护性是一个更重要的...在绝大多数情况下。
这些示例都不涉及创建实例。Boolean
从理论上讲,4个中的3个可以触发类的初始化,并且您的应用程序不会这样做。在这种极不可能的事件中,整个应用程序将分配 2 个对象,否则这些对象将不会被分配。初始化可能需要几微秒,并且从长远来看会消耗几字节的RAM(小于50)。Boolean
这个将等于或比所有其他的相同或更快,因为它只需要将寄存器设置为零。
boolean isItTrue(arg){
return true;
}
单独来看,这必须从存储器加载静态基准电压源,而不是将寄存器归零。但是,在某些情况下,JIT 编译器可能能够优化此参数。
Boolean isItTrue(arg){
return Boolean.TRUE;
}
从表面上看,这涉及对 “box” the 的调用,但 JIT 编译器应该能够通过内联调用将其优化为与前一个代码相同的代码。Boolean.valueOf(true)
true
Boolean isItTrue(arg){
return true;
}
从表面上看,这涉及调用“取消装箱”。此调用可以内联。JIT 编译器还可以避免加载对对象的引用并获取其值字段。Boolean.booleanValue(Boolean.TRUE)
Boolean
Boolean
boolean isItTrue(arg){
return Boolean.TRUE
}
最重要的是,4种替代方案的相对性能取决于JIT编译器在优化方面的成功程度。这将取决于上下文、JIT 编译器的特定性、JVM 设置等。在最好的情况下,JIT编译器可以(至少在理论上)为所有编译器生成相同的(最佳)代码。