融合财经

转载:https://mp.weixin.qq.com/s/CMj

简介: 转载:https://mp.weixin.qq.com/s/CMjs36IXp1E2EyKiaCz80g相信在座的各位都遇到过空指针异常,不甚其烦,本文不是教你避免空指针,而是一些对空指针其他方面的理解。

转载:https://mp.weixin.qq.com/s/CMjs36IXp1E2EyKiaCz80g相信在座的各位都遇到过空指针异常,不甚其烦,本文不是教你避免空指针,而是一些对空指针其他方面的理解。

我们知道调用一个对象的方法,如果对象为 null 肯定会报空指针错误的,但你确定一定会吗?

来看下面的示例:如果 null 对象指向该类型的静态方法,不但不会报空指针错误,而且还会运行正常,是不是很6?

2、拆箱空指针是的,大家要注意拆箱引发的空指针风险,不知道的赶紧往下看,来看下面的例子:拆箱如果为 null 时,引发空指针错误。

这个在最新的《阿里巴巴开发手册》中也提到了需要手册私信我“666”免费获取一份,链接里面举了三目运算符拆箱时的空指针问题,没看过的可以点进去看,这里就不具体展开了。

3、运算符空指针大家要注意了,运算符使用不当也会引发空指针异常,来看下面的例子:例子很明显吧,使用 ==、!= 运算符比较是否相等不会有问题,但使用> < & 等需要计算的运算符就会引起空指针异常。

4、xxx == null引发空指针?

经常看博客或者身边的同事说,字符串比较,常量要放前面,为了避免空指针风险,这个对于 equals 来说确实要这样写。

但是,居然还有人说,甚至也有很多人也是这么在写, == 比较,null也要放前面,这也是为了避免空指针?

这个写法的初衷是 C++ 为了避免逻辑错误的,因为 C++ 写 if(xxx = NULL) 是不会报编译错误的(变量赋值,永远为真),而写 if(NULL = xxx)是会有编译错误的。

所以在 C++ 建议把 NULL 放在前面,是为了避免程序员把 == 写成 = 引起的逻辑错误的。

而在 Ja 里面,if(xxx = null) 是有编译错误提示的:所以 Ja 中不会出现 C++ 的没有编译提示而导致的逻辑问题,所以 Ja 中的 xxx == null 和 null == xxx 是等价的,null 放前面也是没有任何意义的。

我们甚至还可以在 Ja 中写 null == null 的判断,这也是 OK 的,完全没问题的。

5、null instanceof 空指针?

null instanceof 会发生空指针异常么?

来看下面的示例:如果为 null, instanceof 右边可以是任意引用类型,但结果始终输出 false,因为 null 不是任何对象的引用。

另外,之前这篇《避免空指针的 5 个案例》也不错的,没看过的值得阅读一下。


以上是文章"

转载:https://mp.weixin.qq.com/s/CMj

"的内容,欢迎阅读融合财经的其它文章