Java String.valueOf()传入null值

方法传入不同类型的null值,调用的重载方法不同,可能导致空指针异常

测试

入参为 字符类型或 类型未定义,当值为NULL的时候,调用valueof(char[] data),报空指针异常

入参为对象类型,当值为NULL的时候,调用valueOf(Object obj),返回一个”null”字符串.

注意

当 入参类型未定义 ,值为NULL时,两个重载方法均能匹配的条件下,优先会选择精度高的那个,char[]和object均能匹配null值,因此valueOf(null)会调用valueof(char[] data)

案例1
public class TestNull {
    public static void main(String[] args) {
        test(null);   //此处将返回arraylist,因为list同arraylist存在继承或实现的上下级关系
    }

    static void test(List list) {
        System.out.println("list");
    }

    static void test(ArrayList list) {
        System.out.println("arraylist");
    }
}
案例2
public class TestNull {
    public static void main(String[] args) {
        test(null);   //本行会编译报错
    }

    static void test(String str) {
        System.out.println("string");
    }

    static void test(Integer num) {   //如果修改为int,则编译通过
        System.out.println("integer");
    }
}
//因为构造函数是编译时期确定的,代码将无法通过编译,因为String同Integer不存在任何关系,他们都继承自Object,他们的公共父类是object,此时null值不知道该传入那个方法,因此无法通过编译