当前位置: 首页 > article >正文

公司一个bug引出的对象判空、空指针异常话题之NUll、isEmpty()和“”区别

文章目录

    • Java对象判断空null
      • 传入对象时一定要先判断null
      • 判断完null再判断字段是否为空
      • “”的判断

再做一个新增员工的API接口时,前端传入一个对象发生了如下报错:

Required request body is missing…

通常这个问题的通用解决方案是:

  • 查一下前端传参的类型get?Post?,后端要json对象,你给的是不是相同格式。

  • 前端传递的参数是否为必传选项,和后端商量好,是不是少传东西了。

  • 传参之前查一下 Header 里Authoritation是否过期。

我用了上面用过的发现还是不行。

后来debug发现代码问题在这里:

在这里插入图片描述

这段代码是同事写的,这里报了空指针异常了。后来我加了如下判断条件就OK了:

在这里插入图片描述

既然折腾了一下,那就索性总结一下Java代码判空的几种情况。

Java对象判断空null

在考虑代码健壮性的时候,涉及到对象的判断、某些属性、字段的判断一定不能少,因为这是甩锅的利器。

传入对象时一定要先判断null

传递的参数是对象的时候,一定要先判断是否为null,杜绝空指针现象。

判断对象为空可以用:

if (StringUtils.isNull(shopStaffPo){
            
 }

看一下StringUtils.isNull的源码:

 /**
     * * 判断一个对象是否为空
     * 
     * @param object Object
     * @return true:为空 false:非空
     */
    public static boolean isNull(Object object)
    {
        return object == null;
    }

可以看到判断对象是否为空其实就是判断null!

一个对象如果有可能是null的话,首先要做的就是判断是否为null:object == null,否则就有可能会出现空指针异常,这个通常是我们在进行数据库的查询操作时,查询结果首先用object != null,进行非空判断,然后再进行其他的业务逻辑,这样可以避免出现空指针异常。

判断完null再判断字段是否为空

判断字段主要判断:

  • 字符串

  • 数组

  • 集合

怎么判断?

可以用 isEmpty()判断!

看一下它的源码:

    public boolean isEmpty() {
        return value.length == 0;
    }

再做isEmpty()判断之前需要先判断对象为null,不然还是会报空指针异常!

“”的判断

再做字符串判断的时候,要区别一下“”的判断。这个判断的是空字符串。

本质:“” 表示对象产生了,new出来了,但是里面装的字符串是空的。这就是它和null的区别。null判断的是对象存在不存在的问题,有没有new出来,但是“”判断的是对象存在了,对象里有没有字符串的问题。


http://www.kler.cn/a/465904.html

相关文章:

  • JVM学习:CMS和G1收集器浅析
  • 计算机网络复习(大题)
  • matlab中高精度计算函数vpa与非厄米矩阵本征值的求解
  • 数据看板如何提升决策效率?
  • 【JVM】总结篇-运行时内存篇
  • 【MySQL基础篇】三、表结构的操作
  • 【华为OD-E卷 - Linux发行版的数量 100分(python、java、c++、js、c)】
  • 【开源免费】基于SpringBoot+Vue.JS保密信息学科平台(JAVA毕业设计)
  • 电脑文件msvcp110.d丢失的解决方法
  • Transformer算法实现IMDB文本分类任务和WMT14机器翻译任务
  • 数据库进阶教程之存储过程(万字详解)
  • 021-spring-springmvc-组件
  • Java重要面试名词整理(二十):GatewaySkyWalking
  • ELK zookeeper kafka
  • 基于Matlab的变压器仿真模型建模方法(12):单相降压自耦变压器的等效电路和仿真模型
  • 供需平台信息发布付费查看小程序系统开发方案
  • Linux内核 -- Netlink多播组消息处理技术
  • STM32-笔记30-编程实现esp8266联网功能
  • Unity-Mirror网络框架-从入门到精通之Benchmark示例
  • [python SQLAlchemy数据库操作入门]-19.使用复合条件构建复杂查询
  • 猴子吃桃.
  • Golang的并发编程实战经验
  • 【2024最新】基于Python+Mysql+Django+Vue网上商城的设计与实现Lw+PPT
  • AI 自动化编程:现状、挑战与未来发展
  • STM32 和 ESP32
  • 打开idea开发软件停留在加载弹出框页面进不去