分享一个空指针的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;
}
相关推荐
神奇小汤圆1 分钟前
我研读了 500 个 Spring Boot 生产级代码库,90% 都犯了这 7 个致命错误
后端
空中海1 分钟前
03 MyBatis Spring Boot 集成、事务、测试与工程化体系
spring boot·后端·mybatis
ElonMuscle4 分钟前
GO环境速建笔记
后端
用户2986985301410 分钟前
Java 从零生成 Word 文档:段落、图片与表格操作
java·后端
2401_8332693011 分钟前
Java IO流:从字节到字符的桥梁
java·开发语言
月落归舟26 分钟前
深入剖析乐观锁背后的原理
java·乐观锁
SimonKing39 分钟前
OpenCode 在 IDEA 中使用 ACP 协议 VS 直接使用 TUI,哪个编程方式更是你的菜?
java·后端·程序员
Gopher_HBo40 分钟前
Disruptor多生产者多消费者分析
后端
杨运交42 分钟前
[013][缓存模块]基于Redis的计数器缓存模板设计——AbstractCounterCacheTemplate 技术解析
spring boot·后端