Java PreparedStatement::setInt null输入的预期效果

Java PreparedStatement::setInt null输入的预期效果,java,prepared-statement,autoboxing,Java,Prepared Statement,Autoboxing,根据该准则: try(PreparedStatement p_stmt = connection.prepareStatement(sql)) { p_stmt.setString(1, null); ... } 相当于: try(PreparedStatement p_stmt = connection.prepareStatement(sql)) { p_stmt.setNull(1, java.sql.Types.VARCHAR); ... } 我的问题

根据该准则:

try(PreparedStatement p_stmt = connection.prepareStatement(sql)) {
    p_stmt.setString(1, null);
    ...
}
相当于:

try(PreparedStatement p_stmt = connection.prepareStatement(sql)) {
    p_stmt.setNull(1, java.sql.Types.VARCHAR);
    ...
}
我的问题是,这与
int
/
Integer
相同吗??换句话说,此代码将执行什么操作:

try(PreparedStatement p_stmt = connection.prepareStatement(sql)) {
    Integer i = null;
    p_stmt.setInt(1, i);
    ...
}
setInt()

p_stmt.setInt(1, i);
编译为

p_stmt.setInt(1, i.intValue());
由于
i
引用的是
null
,因此将得到
NullPointerException

这将在中进行更详细的解释

在运行时,取消装箱转换按如下方式进行:

  • [……]
  • 如果
    r
    是类型为
    Integer
    的引用,则取消装箱转换将
    r
    转换为
    r.intValue()
  • 如果
    r
    null
    ,则取消装箱转换将引发
    NullPointerException
在你自己的链接中回答这个问题。