java关于非空判断时遇到的问题

问题遇到的现象和发生背景

我的业务需求内容:
简单描述一下,如果该值为空或为0则设置默认值1

问题相关代码,请勿粘贴截图

以下为模拟代码

public class main {
    private static EmptybindInfo emptybindInfo = new EmptybindInfo();
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        try {
            Integer i = emptybindInfo.getflag();
            i=0;
            if(i==null||i==0){
                emptybindInfo.setflag(1);
            }
            System.out.println(emptybindInfo.getflag());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
public class main {
    private static EmptybindInfo emptybindInfo = new EmptybindInfo();
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        try {
            Integer i = emptybindInfo.getflag();
            i=0;
            if(i==0||i==null){
                emptybindInfo.setflag(1);
            }
            System.out.println(emptybindInfo.getflag());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

运行结果及报错内容

第一段代码运行不报错且成功设置默认值
第二段代码运行爆了空指针的错误

我的解答思路和尝试过的方法

这是因为什么呢?有人有遇到过相关问题的吗,可以解释一下原理吗

首先要清楚if条件中的||条件执行逻辑,当该符号之前的条件为true,后面的条件就不再判断,该符号之前的条件为false才执行符号之后的判断,第二段代码之所以报错,是应为已经给i赋予了值,即代表不为空或null,而||符号之后的逻辑和该逻辑矛盾,故报错

必须先判断是否为null,null表示不存在,如果为null后面的i==0就不会执行了;
如果为null的情况下,你先判断i==0肯定就报错了。

判断为空肯定在前啊,得先判断是否为空才能判断是否为0
if(i==null||i==0) 为什么没问题?是因为当i为NULL时,if条件就成立了,后面的i==0是不判断的,所以OK。
但反过来就不行了。当i为NULL时,表示i都不存在,进行0判断就是错误的。

百度搜搜||和|的区别

对不起,没有给i初始化那一步,我忘记注释掉了

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632