4
String.valueOf(null);
  1. 为什么valueOf(char[] c)叫,为什么不叫valueOf(Object o);
  2. 为什么String.valueOf(null);产生 aNullPointerException并且 String.valueOf((Object)null);不产生任何异常?
4

2 回答 2

3

每当不止一种重载方法成为可能的目标时,将使用最具体的一种。

因此,如果您传入一个char[]thenvalueOf(char[])并且valueOf(Object)将是可能的,但valueOf(char[])更具体。因此,将调用那个。

Nownull有点奇怪,因为它是每个非原始类型的合法值,所以它可以是任何这些方法的参数。而且仍然 valueOf(char[])比 更具体valueOf(Object),因此将调用第一个。

于 2014-01-13T14:02:00.063 回答
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);
}
于 2014-01-13T14:01:34.243 回答