专栏首页javascript艺术记一次Java空指针的问题

记一次Java空指针的问题

背景介绍

上线后,接口偶尔会出现调用失败。通过查询日志发现是由于空指针导致的,猜测是由于数据问题导致的。

场景描述

从其他的业务系统中查询分类列表,并根据数量统计字段,来判断是否包含数据

public class CategoryDTO {
    
    /**分类名称*/
    private String name;
    
    /**分类编码*/
    private String code;
    
    /**数量统计*/
    private Integer count;
    
    /**根据count > 0 ? true : false;*/
    private boolean hasValue;
    
}

接口查询结果就是List<CategoryDTO>,其实只需要遍历分类并对 count字段做判断即可。

问题确认

/*
* 数量判断的代码大致逻辑如下,空指针异常发生在flag转换这里
*/
list.forEach(item -> {
    Boolean flag = item.getCount() > 0 ? Boolean.TRUE : Boolean.FALSE;
    item.setHasValue(flag);
});

猜测可能是上游业务系统返回的列表中包含了NULL,所以在遍历前增加了空的判断

list.stream()
    .filter(Objects::nonNull)
    .forEach(item -> {
        Boolean flag = item.getCount() > 0 ? Boolean.TRUE : Boolean.FALSE;
        item.setHasValue(flag);
    });

运行修改的代码后,发现还是会在count转换flag会抛出空指针,并且确认item是非空的。那么问题到底出现在了哪里呢?经过思考后,猜测问题在item.getCount() > 0,忽略了item.getCount()返回的是Integer类型,当Integerint做比较时,会先将Integer转换到int,其实是执行了Integer.intValue(),从item拿到非空的数据,但是count字段是空,导致在比较前的类型转换,产生了NullPointerException

总结

在使用Java包装类向基础数据类型做计算时,需要判断是否为空,避免因为拆箱导致的NPE。

做个记录,以免后续再遇到这样的问题。

本文分享自微信公众号 - javascript艺术(gh_4e5484fd6b52),作者:郭里奥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringCloudGateway笔记(5)-netty空指针问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    yingzi_code
  • Kotlin 是如何避免空指针问题的

    在谈Kotlin的优势的时候,大家都会想到空指针安全这一点,那么Kotlin又是如何避免这些问题的呢?下面从Kotlin的一些语法规则上给出介绍。 可空类型 默...

    xiangzhihong
  • Kotlin 是如何避免空指针问题的

    在谈Kotlin的优势的时候,大家都会想到空指针安全这一点,那么Kotlin又是如何避免这些问题的呢?下面从Kotlin的一些语法规则上给出介绍。 可空类型 默...

    xiangzhihong
  • [Oracle 故障处理]记一次undo表空间使用率99%的问题

    公司一套11g的RAC undo表空间使用率在99%,一直不会下降,由于我们用的是自动UNDO空间管理,可能的原因可能就是由于会话一直在利用UNDO里面的内容

    bsbforever
  • 记一次ES的GC问题

    在双十一时,有用户反馈推广平台物料列表出现了耗时严重的情况。筛选排序系统出现过耗时严重的情况,根据业务系统的筛选排序慢接口的traceId, 我们分析了一下请求...

    Bug开发工程师
  • dubbo服务启动顺序不一致导致空指针问题

    小贝壳
  • 记一次 @Transactional不生效的问题

    今天写代码的时候有一个service需要用到事务,故使用@Transactional注解

    allsmallpig
  • 记一次PHP的Invalid binding type问题

    首先说明下环境问题,新旧服务器的迁移。代码在老服务器运行没有任何问题。环境都是PHP7.3,结果新的服务器上流量导过来以后,就报出了如下问题:

    硬核项目经理
  • 记一次 IDEA 更新 Maven Index 的问题

    由于 maven 默认的中央仓库的速度不是很理想, 所以换成了阿里云的镜像, 但使用后发现, 无法正常更新索引了, Maven 的索引功能可以让 IDEA 自动...

    一份执着✘
  • 记一次worker_rlimit_nofile配置引发的问题

    记录一次最近公司SEO优化压测,以前所有页面上的数据都是通过JS获取的,这样会有一个问题,就是SEO不友好,所以就增加了一层Node,接口请求放在了Node里,...

    后端技术探索
  • 记一次艰难的GC问题排查!

    gc问题一直是一个很难排查的问题,但是他又是一个经常在我们开发业务中出现的。这不,最近在我的项目中就出现了一个比较奇葩的gc问题,排查过程比较繁琐,所以在这里分...

    用户5397975
  • 记一次Linux下文件删除但空间不释放问题的解决

    用户1456517
  • 总结了一些指针易出错的常见问题(一)

      简介:计算机是如何从内存单元中存取数据的呢?从程序设计的角度看,有两种办法:一是通过变量名;二是通过地址。程序中声明的变量是要占据一定的内存空间的,例如,C...

    互联网金融打杂
  • Java学习笔记(九)——记录一次关于slf4j的线上问题排查

    遇到的问题其实很简单,日志文件已经按照规则创建了,但是写不进日志,更奇葩的是在本地调试和QA环境完全没问题,一发布到线上就会出现该问题(QA环境和线上环境能确保...

    Bug生活2048
  • 记一次事务失效的问题排查记录

    昨天遇到一个非常奇怪的问题,在一个Service中使用@Transactional注解的一个方法无论如何都不能开启事务。项目用的是Springboot和Myba...

    Java帮帮
  • springboot+mybatis出现空指针异常时出现的问题及解决方法

    今天遇见了一个问题,困扰了一段时间,试了几种方法,但是还是解决不了,主要的精力还是放在了mybatis插入控制时的问题。但是对于空指针异常有多重问题引起。下面来...

    kirin
  • 记一次序列化的JSON解析问题

    消费者去消费服务端所提供的服务,在使用Post请求中的PostForEntity传递参数的时候,我是这样写的

    cxuan
  • 记一次 Kubernetes 中严重的安全问题

    近期遇到了一次我们自建 Kubernetes 集群中某台机器被入侵挖矿, 后续也找到了原因, 所幸只是用来挖矿…

    米开朗基杨
  • 记一次内存泄漏的问题排查

    收到告警后,笔者先登录到告警机器中, top命令查看此时此刻的各个应用程序占用的内存大小, 这里其实有两个指标可以查看,

    2014v

扫码关注云+社区

领取腾讯云代金券