Java 在条件语句中使用布尔值vs Boolean.TRUE(布尔值)

Java 在条件语句中使用布尔值vs Boolean.TRUE(布尔值),java,autoboxing,Java,Autoboxing,在(1.8+)中,以下两个if语句之间是否存在性能差异。我的代码必须在迭代中进行大量此类调用 无效测试(最终布尔值){ if(val){ ... } } 及 无效测试(最终布尔值){ if(布尔值。真值。等于(val){ ... } } JIT编译器会优化消除差异吗?取消装箱是否比equals方法调用更昂贵?取消装箱等于val.booleanValue(),因此JIT应该能够使用这种方法 Boolean.TRUE.equals(val)看起来更好的是null-安全性,因为在null-值上自动

在(1.8+)中,以下两个if语句之间是否存在性能差异。我的代码必须在迭代中进行大量此类调用

无效测试(最终布尔值){
if(val){
...
}
}

无效测试(最终布尔值){
if(布尔值。真值。等于(val){
...
}
}

JIT编译器会优化消除差异吗?取消装箱是否比
equals
方法调用更昂贵?

取消装箱等于
val.booleanValue()
,因此JIT应该能够使用这种方法

Boolean.TRUE.equals(val)
看起来更好的是
null
-安全性,因为在
null
-值上自动装箱将导致
NullPointerException

另见:

  • 在项目中使用Java10

+1表示空安全。这是Josh Bloch在其演示文稿中提到的“自动装箱意外左戳”。自动装箱模糊了原语和引用类型之间的区别,但引用类型仍然是引用类型。