Java判断集合List、字符串非空方法总结

实际代码编写过程中少不了各种场景空数据的校验,有时候一不小心就空指针了
下面示例列举了大部分场景的空数据的校验场景和注意事项
注意下面示例是伪代码,不能直接运行,记录使用思想

集合

情况1//正确校验方式
List<String> list = null;
if (list != null) {
    System.out.println("不为空");
} else {
    System.out.println("空");
}
执行结果:空

//错误校验方式
//造成这种结果其实是null判断是有没有对list集合分配内存空间,而不是list里面内容是否为空。new ArrayList<>()就已经对list分配了内存空间
List<String> list = new ArrayList<>();
if (list != null) {
    System.out.println("不为空");
} else {
    System.out.println("空");
}
执行结果:不为空

所以一般校验的时候,我们既要考虑集合是为null,还要考虑集合是否为空集合
所以最好是双重判断,一般会有如下几种校验方式

//最传统的校验方法
if (list != null && list.size() > 0) { }
//源码
//public boolean isEmpty() {
	//return size() == 0;
//}
if (list != null && !list.isEmpty()) { }
//此方法包含了上面两种校验方式,个人推荐使用这种方式
//此处引用包 import org.springframework.util.CollectionUtils
//源码,所以根本原理还是用的isEmpty方法
//public static boolean isEmpty(@Nullable Collection<?> collection) {
	//return collection == null || collection.isEmpty();
//}
if (!CollectionUtils.isEmpty(list)) { }

但是 还有一个坑

//会造成以上三种情况都判断不出来
//所以代码里要避免list.add(null)的陷阱
List<String> list = new ArrayList<>();
list.add(null);

字符串

// \n换行转义符  \t空格转义符,8个空格 \r回车
StringUtils.isNotEmpty(null) = falseStringUtils.isNotEmpty("") = falseStringUtils.isNotEmpty(" ") = true X
StringUtils.isNotEmpty("\n\t\r") = true X
StringUtils.isNotBlank(null) = falseStringUtils.isNotBlank("") = falseStringUtils.isNotBlank(" ") = falseStringUtils.isNotBlank("\n\t\r") = false

所以,在业务逻辑中,用isNotBlank要比isNotEmpty更好,可以有效的防止空格、换行、回车等一些特殊的情况


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