2012-02-10 78 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返回“”。