Java 判断对象空的方法
一、使用 == 或者 equals()比较
==
str == "";
str == null;
equals()
"".equals(str)
//不推荐判断null
String str = null;
str2.equals(str);
注意
java中对equals的定义: 对于任何非空引用值 x,x.equals(null) 都应返回 false;
使用equals()判断对象null,会出现java.lang.NullPointerException异常
对于null
1.null是任何引用类型的默认值,不严格的说是所有object类型的默认值。这对所有变量都是适用的,如成员变量、局部变量、实例变量、静态变量;
2.null是任何一个引用类型变量的默认值,在java中不能使用null引用来调用任何的instance方法或者instance变量。
自定义方法
public static boolean isNull(Object object){
if (null == object) {
return true;
}
if ((object instanceof String)){
return "".equals(((String)object).trim());
}
return false;
}
二、StringUtils.isBlank(String str)
StringUtils.isBlank(String str) 判断某字符串是否为空或长度为0或由空白符(whitespace) 构成
StringUtils.isBlank(str);
//
System.out.println(StringUtils.isBlank(null)); //true
System.out.println(StringUtils.isBlank("")); //true
System.out.println(StringUtils.isBlank(" ")); //true
三、StringUtils.isEmpty(String str)
StringUtils.isEmpty(String str) 判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0
StringUtils.isEmpty(str);
//
System.out.println(StringUtils.isEmpty(null)); //true
System.out.println(StringUtils.isEmpty("")); //true
System.out.println(StringUtils.isEmpty(" ")); //false
注意:
StringUtils.isNotEmpty(String str) 等价于 !isEmpty(String str)
四、Optional(T value),empty(),of(T value),ofNullable(T value)
JDK 8 新方法**
1.Optional.of(T value)
该方法通过一个非 null 的 value 来构造一个 Optional,返回的 Optional 包含了 value 这个值。对于该方法,传入的参数一定不能为 null,否则便会抛出 NullPointerException。
//of(T value)
Optional<String> str = Optional.of("");
//传入参数为null,抛出NullPointerException.
Optional<String> strNull = Optional.of(null);
2.Optional.ofNullable(T value)
Optional.ofNullable(T value):若 value 不为 null,创建 Optional 实例,否则创建空实例
该方法和 of 方法的区别在于,传入的参数可以为 null
public static <T> Optional<T> ofNullable(T value) {
//进行三目运算,判断传入的参数是否为 null,如果为 null 的话,返回的就是 Optional.empty()。
return value == null ? empty() : of(value);
}
Optional<String> nullableOpt = Optional.ofNullable(str);
3.Optional.empty()
该方法用来构造一个空的 Optional,即该 Optional 中不包含值 —— 其实底层实现还是 如果 Optional 中的 value 为 null 则该 Optional 为不包含值的状态,然后在 API 层面将 Optional 表现的不能包含 null 值,使得 Optional 只存在 包含值 和 不包含值 两种状态。
//empty() :用于创建一个没有值的Optional对象:
Optional<String> emptyOpt = Optional.empty();
Optional判空
//判空写
Optional.ofNullable(变量).orElse(默认值);
//循环遍历集合
List<String> list = getList();
Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(o -> {
System.out.println(o);
});
使用orElse方法设置默认值,Optional类还包含其他方法用于获取值:
orElse():如果有值就返回,否则返回一个给定的值作为默认值;
orElseGet():与orElse()方法作用类似,区别在于生成默认值的方式不同。该方法接受一个Supplier<? extends T>函数式接口参数,用于生成默认值;
orElseThrow():与前面介绍的get()方法类似,当值为null时调用这两个方法都会抛出NullPointerException异常,区别在于该方法可以指定抛出的异常类型。
扩展
判断Null:
isPresent():如果创建的对象实例为非空值的话,isPresent()返回true,调用get()方法会返回该对象,如果没有值,调用isPresent()方法会返回false,调用get()方法抛出NullPointerException异常。
使用filter()方法过滤
filter()方法可用于判断Optional对象是否满足给定条件,一般用于条件过滤,在代码中,如果filter()方法中的Lambda表达式成立,filter()方法会返回当前Optional对象值,否则,返回一个值为空的Optional对象。