java 判断空

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");
        }
    }
}

 

转载于:https://my.oschina.net/sprouting/blog/806878

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值