Hello Guys可以帮助我找出在PreparedStatement.setBoolean(1,Boolean.TRUE)和PreparedStatement.setBoolean(1,true)之间的最佳实践是什么
因为Boolean.TRUE
的类型为Boolean
,并且
void setBoolean(int parameterIndex, boolean x) throws SQLException;
需要boolean
,使用setBoolean(1, true)
更有意义,以避免不必要的拆箱。
两者均有效,但请注意setBoolean
接受setBoolean
,而不接受boolean
。 Boolean
是TRUE
(TRUE
周围的包装对象)。没有理由将包装器与Boolean
一起使用,它只是通过true
方法自动拆箱到setBoolean
。
您在评论中说:
我在java doc中发现了此问题,“驱动程序在将其发送到数据库时将其转换为SQL BIT或BOOLEAN值”。因此最好使用Boolean.TRUE
不,驱动程序使用的SQL类型与此无关。它与boolean
方法签名所说的有关。方法签名说它接受一个booleanValue
,所以这就是它的样子。使用booleanValue
起作用的唯一原因是before调用setBoolean
,编译器输出代码以在boolean
上调用Boolean.TRUE
以获取其等效的setBoolean
值(booleanValue()
)。实际上,这:
Boolean.TRUE
和此:
boolean
产生identical字节码,看起来像这样:
21:getstatic#6 //字段java / lang / Boolean.TRUE:Ljava / lang / Boolean;24:invokevirtual#7 //方法java / lang / Boolean.booleanValue :()Z27:invokeinterface#8,3 // InterfaceMethod java / sql / PreparedStatement.setBoolean:(IZ)V