示例代码:
System.out.println("str".contains(null));
输出:
Exception in thread "main" java.lang.NullPointerException
at java.lang.String.contains(String.java:2133)
分析一下String类contains()方法源码可知,contains()方法的参数类型是CharSequence接口。String类,StringBuffer类和StringBuilder类都是这个接口的实现类。contains()方法判断是否包含子串是通过indexOf方法,而indexOf方法的参数类型是String,所以会将CharSequence类型toString,如果contains方法的参数是null,这里toString()就会报空指针异常。
所以在开发中,要注意避免使null成为contains方法的参数!
附上String类contains()和indexOf()方法的源码:
public boolean contains(CharSequence s) {
return indexOf(s.toString()) > -1;
}
public int indexOf(String str) {
return indexOf(str, 0);
}