空指针常见原因和解决办法

简介: 首先NullPointerException是RuntimeException的一个子类,这是运行时,在编译时期不会触发,所以这是最最最容易出现的线上bug;

首先NullPointerException是RuntimeException的一个子类,这是运行时,在编译时期不会触发,所以这是最最最容易出现的线上bug;

20210122111039181.jpg

容易出现空指针异常的场景


在调用对象方法时


比如处理字符串常用的replace方法,数组的length方法,map的size方法等等;

str.replace(…)

如果str为null,这里就直接空指针了

判断一个str是否等于"test",你直接str.equals(“test”)

还有像map.forEach()、list.stream() 、object.equals()、str.toString()…

类似的还有很多,太多了


在判断对象是否为空时


这个是最坑的,导致空指针的原因就是在调用对象方法时没有对对象判空,但是有些小伙伴往往就是在这个环节出问题,明明对象判空的目的就是避免空指针,好家伙,到头来这成了罪魁祸首

比如你在调用str.replace(…)时,意识到这里应该对str做判断,不为空才调用replace方法

于是你开开心心一脸自信

if(!str.isEmpty()){

str.replace(…)

}

或者

if(str.length()>0){

str.replace(…)

}

这么一套操作下来以为自己的代码天衣无缝,这破公司已经容不下我了

万万没想到从一个坑掉进了另一个坑

str.isEmpty()、str.length()自身也会造成空指针

嘤嘤嘤~~~


对象判空技巧


我就直接给出几个常用的

StringUtils.isNotBlank(str)

StringUtils.isNotEmpty(str)

object != null

太多了,这里不一一列举


总结和技巧


在调用对象方法前先判断对象是否为空(不管是实体、变量、常量、map、list还是其他什么)

在判断对象是否为空时注意不要直接调用判空方法,判空方法特么也是方法

尽量不要用str.toString(),改用String.valueOf()

比如你要判断一个str是否等于"test",你不要str.equals(“test”),可以反过来"test".equals(str)


避免空指针远不止上面这些方法,更多的还需要自己总结经验。


相关文章
|
8月前
|
Java C语言 C++
空指针
空指针
55 3
|
3月前
|
编译器 C语言
如何检查野指针?
野指针是指未初始化或已释放的指针,检查方法包括:1. 初始化所有指针;2. 使用智能指针;3. 释放后将指针置为 nullptr;4. 利用静态和动态分析工具检测。这些措施可有效避免野指针引发的错误。
|
4月前
|
安全
C 空指针的使用注意点
在 C 语言中,空指针(NULL pointer)是指不指向任何有效地址的指针。使用时需注意以下几点:1. 初始化指针,如 `int *ptr = NULL;` 2. 解引用前检查有效性,如 `if (ptr != NULL)` 3. 函数参数中处理空指针 4. 用作标识值 5. 检查动态内存分配结果 6. 释放内存后设为 `NULL` 7. 多级指针需逐层检查 8. 谨慎赋值空指针。空指针是强大的工具,但需谨慎使用以确保程序安全稳定。
83 12
|
8月前
|
存储 监控 Java
内存泄漏及其解决方法
内存泄漏及其解决方法
111 0
|
7月前
|
存储 编译器 数据处理
栈溢出及解决方法
栈溢出及解决方法
|
8月前
|
存储 编译器 C语言
关于数组越界却不会报错
关于数组越界却不会报错
|
安全 编译器 C语言
VS编译器警告scanf未定义的三种解决办法
我们开始学习编程时候上手第一门语言通常是C语言,我们还需要下载一个编译器,最常见的莫过于Microsoft公司开发的Visual Studio(下面都简称VS)系列编译器,但是VS中我们使用scanf等函数时语句总是报错,显示不安全。
VS编译器警告scanf未定义的三种解决办法
解决办法一:GetProcAddress函数返回值总为NULL
解决办法一:GetProcAddress函数返回值总为NULL
261 0
内存越界并不等于马上出错
内存越界并不等于马上出错
100 0