分享一个空指针的bug

今天分享一个线上bug,还好没有出大问题,默默改掉了。

代码大致如下:

typescript 复制代码
public class ContainTest {
    
    public static void main(String[] args) {
        List<String> list = getList();
        String a = list.get(0);
        String b = list.get(1);
        //只判断了a是否为null,没判断b,造成了contains方法抛出空指针
        if (!StringUtils.isEmpty(a)&&a.contains(b)) {
            System.out.println("a包含b");
        }
    }


    private static List<String> getList() {

        List<String> list = new ArrayList<>();
        list.add("test");
        list.add(null);
        return list;
    }
}

String的contains方法的参数不能为null,否则会抛出空指针异常。 我们看下contains方法的源码:

typescript 复制代码
public boolean contains(CharSequence s) {
    return indexOf(s.toString()) > -1;
}
相关推荐
专注于大数据技术栈20 小时前
java学习--==和equals
java·python·学习
低调波20 小时前
springboot实现批量下载
windows·spring boot·后端
鲸沉梦落20 小时前
JVM类加载
java·jvm
carry杰20 小时前
esayExcel导出图片
java·easyexcel 图片
Victor35620 小时前
Redis(138) Redis的模块如何开发?
后端
Victor35620 小时前
Redis(139)Redis的Cluster是如何实现的?
后端
路人甲ing..21 小时前
Android Studio 快速的制作一个可以在 手机上跑的app
android·java·linux·智能手机·android studio
心灵宝贝21 小时前
Mac 安装 JDK 8u281(JDK-8u281-1.dmg)详细步骤(附安装包)
java·macos·intellij-idea
記億揺晃着的那天21 小时前
从单体到微服务:如何拆分
java·微服务·ddd·devops·系统拆分
7ioik1 天前
什么是线程池?线程池的作用?线程池的四种创建方法?
java·开发语言·spring