String.valueOf(null);
- почему
valueOf(char[] c)
называется и почему неvalueOf(Object o);
?? - Почему
String.valueOf(null);
производитNullPointerException
иString.valueOf((Object)null);
не является исключением?
String.valueOf(null);
valueOf(char[] c)
называется и почему не valueOf(Object o);
??String.valueOf(null);
производит NullPointerException
и String.valueOf((Object)null);
не является исключением?String.valueOf((Object) null)
вызывает следующий метод:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Как вы можете видеть, нулевой случай управляется.
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);
}
Хорошее объяснение того, что, на самом деле это не покрывает причину, почему –
Всякий раз, когда более чем один перегруженные Митос будет возможной мишенью наиболее специфичный один можно было бы использовать.
Так что, если вы передаете в char[]
затем valueOf(char[])
и valueOf(Object)
было бы возможно, но valueOf(char[])
более специфичен. Поэтому тот будет называться.
В настоящее время null
является своеобразным, потому что это юридическое значение для каждого не примитивного типа, поэтому он может быть аргументом для любого из этих методов. И ещеvalueOf(char[])
более конкретно, чем valueOf(Object)
, поэтому будет называться первый.
. Следствием этого является то, что если нет единственной наиболее конкретной перегрузки (например, если бы существовало также 'valueOf (String)' - ни один вариант не является более конкретным чем _all_ другие), тогда вы получите ошибку компиляции. –
Поскольку valueOf (char [] data) - это первый метод, для которого null может быть адаптирован (в качестве массива - объект). –
Назовем наиболее конкретный метод. 'null' не является объектом, что делает' char [] c' более конкретным. – Maroun
@ ᴍarounᴍaroun 'null' * is * a Объект, как при назначении, совместим с типом' Object'. –