CRUD攻城狮平时最常见的问题是啥?莫过于做判空
操作的时候报NullPointerException
啦
踩坑路程
下面小名来给大家列举一下小名平日常见的 判空报错以及正确操作:
场景一:
PracticeUser practiceUser = new PracticeUser();
if (!practiceUser.getName().equals(null) ) {
System.out.println("有数据");
} else {
System.out.println("没数据");
}
返回值:
因为practiceUser 为空,所以刚运行就会报 空指针异常
Exception in thread "main" java.lang.NullPointerException
at eamon.daily.practice.user.controller.PracticeUserController.main(PracticeUserController.java:48)
场景二:
所以我们下意识的就会想到,改成这样:
PracticeUser practiceUser = new PracticeUser();
if (!null.equals(practiceUser.getName())) {
System.out.println("有数据");
} else {
System.out.println("没数据");
}
此时便会报编译时异常
这是因为null
是无法调用任何方法的。
场景三:
此时此刻,因为practiceUser.getName()
是字符串,所以我们便会想到最常用的一种方式
PracticeUser practiceUser = new PracticeUser();
if (!practiceUser.getName().equals("")) {
System.out.println("有数据");
} else {
System.out.println("没数据");
}
但是这样的话,同理,依然会在运行到practiceUser
这里时会报空指针异常
Exception in thread "main" java.lang.NullPointerException
at eamon.daily.practice.user.controller.PracticeUserController.main(PracticeUserController.java:48)
场景四:
此时,便是我们平时常用最容易犯错误的地方
PracticeUser practiceUser = new PracticeUser();
if (!"".equals(practiceUser.getName())) {
System.out.println("有数据");
} else {
System.out.println("没数据");
}
“”.equals() 相当于new String().equals() , 此时practiceUser.getName()
为null,这样判断结果必为true
所以我们应该修改为practiceUser.getName() != null
就对了,不过在平时开发的时候我们应该写成null!=practiceUser.getName() && !"".equals(practiceUser.getName())
会更保险些,即:
PracticeUser practiceUser = new PracticeUser();
if (null!=practiceUser.getName() && !"".equals(practiceUser.getName())) {
System.out.println("有数据");
} else {
System.out.println("没数据");
}
返回值:没数据
场景五:
最后一种是最保险的一种方案,调用StringUtils
中的isNotBlank()
方法:
PracticeUser practiceUser = new PracticeUser();
if (StringUtils.isNotBlank(practiceUser.getName())) {
System.out.println("有数据");
} else {
System.out.println("没数据");
}
返回值:没数据
首先我们先来看看StringUtils中
的isNotBlank()
方法的代码实现
- 接下来我们来们一下
mybatis-plus-3.3.2
中的isBlank()
实现方法
- 我们再来看下
commons-lang3
中的isBlank()
实现方法
看到上面的源码,我们发现他们都调用了
boolean isWhitespace(char ch)
此方法用于判断指定字符是否为空白字符,空白符包含:空格、tab键、换行符
总结:两者的isBlank()方法都是在判断1. 是否null
2. 是否为“”
3. 进行了为空(字符串都为空格、制表符、tab 的情况)的判断,例如: " "
如果觉得小名的文章帮助到了您,请关注小名,支持一下小名