做为一个只会使用Java语言的程序员来说,在看到有人写判 null 的时候有如下代码
public boolean isNull(Object obj) {
return null == obj;
}
那么是不是感觉和我们看到的一般判断 null 的代码有点不一样呢?
是的,这里写的是 null == obj ; 那么为什么会有这样的写法呢,在我查阅了许多资料后发现,这其实主要是防误写的,就是把 == 写成了 = ,主要是像C语言中,以下代码是可以编译过的:
if(obj = null){
// do something
}
而上面的代码会造成空指针,但是我们知道,在java中这样写一般是编译不过的。没错,一般是编译不过的,还是有一种情况下可以编译的过的!
那么在什么情况下是可以编译的过呢?
思考:
- java 条件判断中需要的是什么类型呢?
是布尔值- 什么样的布尔值可以赋值 null 呢?
对,就是boolean 的包装类 Boolean
那么就可以写出如下的代码
public void testNull(Boolean bool){
if (bool = null){
// do something
}else {
}
}
这样的代码是可以通过编译的,但是在运行的时候会报 NullPointerException
但是也只有这种情况会出现误操作,并且现在的编辑器也会有提示的,如idea,就会有提示
空指针代码提示这种场景也是比较低的。
所以作为一个Java程序员来说,我个人认为你习惯哪种写法都是没有问题的,借助IDE的静态代码检查能力也能帮我规避很多问题。
主要是记录在Java中其实是可以写出 if (bool = null)可编译通过的代码。
网友评论