别来Java卷了 2022-03-28 16:02 采纳率: 100%
浏览 47
已结题

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

运行结果及报错内容

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

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

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

  • 写回答

6条回答 默认 最新

  • 一起随缘 2022-03-28 16:41
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端