这是一个非常基本的问题,但为什么以下代码返回空指针异常?
String a = null;
String b = null;
System.out.println(a.equals(b));
根据这里的文件:
.equals()
函数在比较值之前首先检查null。它不应该返回true,因为它们都是null吗?
答案 0 :(得分:5)
您链接的方法包含两个对象,并且是静态方法。您需要像Objects.equals(a, b)
一样调用它。相反,你在一个抛出NPE的空对象上调用.equals()
答案 1 :(得分:3)
不应该返回true,因为它们都是空的吗?
NOP。由于 是空引用的对象,因此在该对象上调用 ANY 实例方法将抛出NPE
所以你能做什么:
如果您还在使用java 6
System.out.println(a == null ? b == null : a.equals(b));
从java 7开始
System.out.println(Objects.equals(a, b));
答案 2 :(得分:0)
我通常会写下面的方法,
private boolean equalsWithNull(String first, String second){
return ((first!=null&&second!=null && first.equals(second)) || (first==null && second==null));
}
答案 3 :(得分:0)
Objects::equals
是最佳选择,但您可以使用
Optional.ofNullable(a).equals(Optional.ofNullable(b))
也是。但是,当您选择Optional
方法而不是Objects
答案 4 :(得分:-1)
你可以检查两个值而不是引用,
String a = null;
String b = null;
System.out.println(a == b ? "true":"false");
它返回true。