为什么 String 用 + 运算符连接 null,并使用 concate() 方法抛出 NullPointerException

2022-09-03 04:37:14

这是我的类,我在其中连接两个字符串。字符串与 using + 运算符连接,执行平稳,但使用方法抛出。nullNullPointerExceptionconcate()

public class Test {

    public static void main(String[] args) {

        String str="abc";
        String strNull=null;

        System.out.println(strNull+str);

        str.concat(strNull);
    }
}

谁能告诉我它背后的原因??


答案 1

案例1:

 System.out.println(strNull+str);  // will not give you exception

文档(字符串转换)

如果引用为 null,则将其转换为字符串“null”(四个 ASCII 字符 n、u、l、l)。

否则,转换就像调用引用对象的toString方法一样执行,没有参数;但是,如果调用 toString 方法的结果是 null,则使用字符串“null”。

案例2:

str.concat(strNull);  //NullPointer exception

如果您看到它的来源使用,那么就像给你一个.concat(String str)str.length();null.length()NullPointerException


答案 2

如果您在java.lang.String source中看到,并使用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);
}