Строковые и нулевые указатели в Java - PullRequest
1 голос
/ 10 февраля 2012

Следующий код сводит меня с ума:

private String blahBlah(){
    return null;
}

@Test
public void myTest(){
    System.out.println(blahBlah()); //Good, output "null"
    Object obj = blahBlah();
    System.out.println(obj.toString()) //Good as above
    //System.out.println(blahBlah().toString()); //Bad, NullPointerException
    //System.out.println(((Object)blahBlah()).toString()); //Bad as above
}

Кто-нибудь может объяснить вышеуказанное поведение?

UPDATE:

Приведенный выше код НЕ является правдой. Что я на самом деле испытал, так это то, что я получил NullPointerException и отслеживаю вызов toString (), и я пробовал разные обходные пути, включая приведение в оператор, но это не работает. Но после того, как я использовал раздельное приведение, я случайно удалил вызов toString(), чтобы он работал.

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

Легко.

Вы можете распечатать null; вы просто не можете отменить ссылку на null значение.

0 голосов
/ 10 февраля 2012

Вы можете использовать String.valueOf(Object) для получения toString выходных данных от объекта или null, если переданное значение равно null.

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#valueOf(java.lang.Object)

public static String valueOf(Object obj)

Возвращает строковое представление аргумента Object.

Параметры:
obj - Объект.

Возвращает:
, если аргумент null, то строка, равная "null";в противном случае возвращается значение obj.toString().

0 голосов
/ 10 февраля 2012

Потому что вы возвращаете строку, указывающую на ноль, вместо того, чтобы указывать на строку со значением ноль. Попробуйте изменить return null на return "".

...