if (("").equals(regNo) || null == regNo){
System.out.print("是空就会进来");
return;
}
对于java而已,上面的判空基本的天天会写的,但是不合理的写法,往往会导致null指针异常,如上,如果改写一下。
if ((regNo).equals("") || null == regNo){
System.out.print("如果regno为空,就已经报空指针异常了");
return;
}
还有种比较常见的错误。
if (("").equals(regNo) && null == regNo){
System.out.print("上面的&&会导致即使一个为空,但还是会跳过,因为要2个都成立才会进来");
return;
}
还有下面这种
if (!(("").equals(regNo) || null == regNo)){
System.out.print("这种写法,只要一个为真,那么返回的就是false,不会执行");
return;
}
public class NullMain {
public static void main(String[] args) {
NullMain nullMain = new NullMain();
nullMain.test9();
}
/**
* 结果:我没被执行test9
* 只有不为空才会执行
*/
public void test9() {
String regno = null;
if (!(("").equals(regno) || null == regno)) {
System.out.println("我被执行了test9");
} else {
System.out.println("我没被执行test9");
}
}
/**
* 结果:我被执行了test7
* 有效的判空, 是空就不会执行
*/
public void test7() {
String regno = "";
if (("").equals(regno) || null == regno) {
System.out.println("我被执行了test7");
} else {
System.out.println("我没被执行test7");
}
}
/**
* 结果:我没被执行test8
* 无法判空
* 都没null才会执行,实际不太可能 不是null就是""
*/
public void test8() {
String regno = "";
if (("").equals(regno) && null == regno) {
System.out.println("我被执行了test8");
} else {
System.out.println("我没被执行test8");
}
}
/**
* 结果:我被执行了test6
* regno.equals(""), 没报nul指针,但有风险
*/
public void test6() {
String regno = "";
if (regno.equals("")) {
System.out.println("我被执行了test6");
} else {
System.out.println("我没被执行test6");
}
}
/**
* 结果:我被执行了test1
* "".equals(regno) 有效判断了 ""
*/
public void test1(){
String regno = "";
if ("".equals(regno)){
System.out.println("我被执行了test1");
} else{
System.out.println("我没被执行test1");
}
}
/**
* 结果:我没被执行test2
* "".equals(regno) 不能有效判断了null,只能判断""
*/
public void test2() {
String regno = null;
if ("".equals(regno)) {
System.out.println("我被执行了test2");
} else {
System.out.println("我没被执行test2");
}
}
/**
* 结果:我被执行了test3
* "regno == null , 能有效判断了null
*/
public void test3() {
String regno = null;
if (regno == null) {
System.out.println("我被执行了test3");
} else {
System.out.println("我没被执行test3");
}
}
/**
* 结果:我被执行了test4
* null == regno , 能有效判断了null
*/
public void test4() {
String regno = null;
if (null == regno) {
System.out.println("我被执行了test4");
} else {
System.out.println("我没被执行test4");
}
}
/**
* 结果:我没被执行test5
* regno == null , 不能有效判断了""
*/
public void test5() {
String regno = "";
if (regno == null) {
System.out.println("我被执行了test5");
} else {
System.out.println("我没被执行test5");
}
}
}