这是我的班级,我连接两个字符串.串连接具有null使用+运算执行顺利,但将引发NullPointerException与concate()方法.
public class Test {
public static void main(String[] args) {
String str="abc";
String strNull=null;
System.out.println(strNull+str);
str.concat(strNull);
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我背后的原因吗?
sin*_*ash 14
情况1:
System.out.println(strNull+str); // will not give you exception
Run Code Online (Sandbox Code Playgroud)
来自docs(String转换)
如果引用为null,则将其转换为字符串"null"(四个ASCII字符n,u,l,l).
否则,执行转换就好像通过调用没有参数的引用对象的toString方法一样; 但是如果调用toString方法的结果为null,则使用字符串"null".
案例2:
str.concat(strNull); //NullPointer exception
Run Code Online (Sandbox Code Playgroud)
如果你看到源的concat(String str)它采用str.length();所以它会像null.length()给你一个NullPointerException.
如果你在java.lang.String源中看到,并使用null作为参数.NPE在length()方法的第一行中抛出.
public String concat(String str) {
int otherLen = str.length();//This is where NullPointerException is thrown
if (otherLen == 0) {
return this;
}
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
}
Run Code Online (Sandbox Code Playgroud)