2013-11-28 2 views
-1

В java Doc написано, что String.valueOf() вернет «null», если аргумент имеет значение null, но на практике он дает исключение null-указателя для нулевого аргумента. Я хочу понять причину. Пытался посмотреть на GREPCODE, не смог. Пожалуйста, объяснитеString.valueOf() Null pointer

+5

См. Здесь: http://stackoverflow.com/questions/3131865/why-does-string-valueofnull-throw-a-nullpointerexception –

+2

Вы внимательно читали документы? В нем говорится: «Если не указано иное, передача нулевого аргумента конструктору или методу в этом классе приведет к вызову NullPointerException». – Sajmon

ответ

0

Ваш звонок активирует String.valueOf(char value[]), который выдает NPE в случае нулевого аргумента. String.valueOf(Object value) работает, только если вы отбрасываете объект на этот метод. Посмотрите на here

1

Если у вас есть такой код:

System.out.println(String.valueOf((Object) null)); 

«нулевой» печатается на консоль. Если у вас есть:

System.out.println(String.valueOf(null)); 

a NPE выбрасывается.

Это потому, что значение Of перегружено.

String.valueOf(Object)

String.valueOf(char[])

Для объяснения NPE, если вы исследуете код String.valueOf (полукокса []):

return new String(data); 

и конструктор для строки является:

public String(char value[]) { 
    this.value = Arrays.copyOf(value, value.length); 
} 

На этой линии NPE выбрасывается с помощью s tatement value.length.