第一次写博客,希望是一个美好的开始。
对于java而言,我们都知道有8个基本类型,而每个基本类型都会有对应的包装类型,至于基本类型以及对应的包装类型这里不作列举了。像int对应的包装类型是Integer,有的时候,我们通过前端进行传入参数到后台,像springmvc,我们在后台会进行参数的绑定,举一个比较简单的例子,地址 :http://127.0.0.1:8080/getUserInfo?userId=2类似这样的一个请求,我们的后台一般都这样写 :
@RequestMapping("/getUserInfo")
public String getUserInfo(Integer userId){
if(userId != null && userId != 0){
...
}
}
但是在有的时候我们可以会在前端进行校验,保证输入参数的合法性,所以有的时候我们会直接这样去操作
直接进行 userId != 0的条件判断,但是很多时候,如果该参数没有传入,我想表达的就是在该对象是null的情况下,如果直接进行如下判断则会抛出空指针异常问题。
其实看到报错大概也是知道是什么原因了。我们都知道在常用类型和对应的包装类型进行相互转换的过程中会有自动装箱拆箱的操作,这是自JDK1.5之后新增的特性,然而或许大家只是知道有这个特性,但是具体在进行装箱和拆箱的过程中做了哪些事,或许并不是十分了解。
当我们执行
userId != 0时,Integer内部会先进行拆箱操作,在进行拆箱操作时当我们传入的为null时,必然会导致方法内部抛出空指针异常。