为什么valueOf(null)调用构造函数valueOf(char [])

时间:2014-01-13 13:57:28

标签: java string value-of

String.valueOf(null);
  1. 为什么valueOf(char[] c)被调用,为什么不被valueOf(Object o); ??
  2. 为什么String.valueOf(null);会产生NullPointerException和。{ String.valueOf((Object)null);不会产生任何异常吗?

2 个答案:

答案 0 :(得分:3)

每当多个重载方法成为可能的目标时,将使用最具特异性的方法。

因此,如果您传入char[],则可以valueOf(char[])valueOf(Object),但valueOf(char[])更具体。因此,那个人将被召唤。

现在null有点奇怪,因为它是每个非基本类型的合法值,因此它可以是任何这些方法的参数。 仍然 valueOf(char[])valueOf(Object)更具体,因此第一个将被调用。

答案 1 :(得分:1)

String.valueOf((Object) null)调用以下方法:

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

如您所见,管理 null case

String.valueOf(null)调用以下方法:

public static String valueOf(char data[]) {
    return new String(data);
}

它自己称之为:

public String(char value[]) {
    this.offset = 0;
    this.count = value.length; // <-- NPE
    this.value = StringValue.from(value);
}