java类型中的坑

最近在跟开发一起做代码review的时候,发现一个很有意思的nullpointexception。

我们先来看这么一段代码

return  1==testcase.testStatus:true?false;

初看没什么不对是不是,但是这有个问题

在java里边,1是值类型,而testStatus是一个引用类型

这里稍微扩展下:
值类型:也就是基本数据类型,包括
四类:1,整型、2,浮点型、3,字符型、4,逻辑型。
八种:1,整型有三种:byte , short,int ,long
2,浮点型有二种:float,double
3,字符型有一种:char
4,逻辑型有一种:boolean
引用类型就是除了这些以外的其他类型

所以看到这里,应该懂了.虽然testStatus本身是一个integer。这么直接比较理论上是可以的。
但是如果,teststatus被置成空,引用的类型要跟值类型进行比较,就会进行拆箱,拆箱的时候
如果指针指向是空的,就会引发nullpointexception,导致服务不可用。

装箱和拆箱就是值类型和引用类型的转化的过程。
将一个值类型转换成引用类型的称为装箱。
讲一个引用类型的转换成值类型的称为拆箱。
值类型变量装箱成为一个引用类型的变量时,首先会在托管上为新的引用类型变量分配内存空间,然后将值类型变量拷贝到托管堆上新分配的对象内存中,最后返回新分配的对象内存地址。
装箱操作是可逆的,所有就有了拆箱的操作,拆箱操作获取指向对象中包含值类型部分的指针,然后由程序员手动将其对应的值拷贝给值类型变量。

上述的错误,会导致空指针,方法失效。

针对这延伸一下,有哪些写代码的方式会容易引起空指针异常,在代码review中要注意识别的
http://www.importnew.com/7268.html

发现还是有很多的。只能说,开发要想做的好也是不容易啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值