2012-02-10 75 views
1

下面的代碼讓我很惱火:字符串和空指針在Java中

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

呃......你確定'myTest' *的第三行不會拋出異常嗎? – luiscubal 2012-02-10 02:13:19

+0

對不起,我從觀察的代碼改變了。我會修好它。 – 2012-02-10 02:21:07

回答

1

簡單。您可以打印null;您無法取消引用null的值。

+0

這個解釋對於直接調用'toString()'來說已經足夠了。但是,你如何解釋聲明演員和分離演員的區別? – 2012-02-10 02:18:16

+0

@EarthEngine,duffymo是正確的。上面的代碼示例最簡單的解釋是'blahBlah()'不是一致返回'null',或者您沒有運行該示例中的代碼。你是否在調試器中排除了這兩者? – 2012-02-10 02:31:56

+0

我並不在意;不要寫這樣的代碼。 – duffymo 2012-02-10 02:37:43

0

因爲您正在返回指向null的字符串,而不是指向值爲null的字符串。嘗試改變返回null返回「」。