public class test {
public static void main(String[] args) {
String s = null;
System.out.println(s.equals("aaa"));
}
}
//运行结果
Exception in thread "main" java.lang.NullPointerException
这是api中对NullPointerException的解释,现在s是一个null,对象所以调用equals()方法会报出异常
而如果是下边这样会正常输出false
public class test {
public static void main(String[] args) {
String s = null;
System.out.println("aaa".equals(s));
}
}
//运行结果:
false
原因:看String类的equals()方法源码,instanceOf方法判断anObject是不是String类的一个实例,
很明显null肯定不是String类的实例所以直接返回false,不会报出异常
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}