if(str1 == null)抛出NullPointerException时

时间:2010-05-13 20:41:15

标签: java string nullpointerexception

在java中,以下行是否有可能(甚至0.01%)抛出NullPointerException?

public static void handleRequest(String str1){
   if (str1 == null){  // this line throws NPE, how come !! is it a JDK1.5 bug!!
        return null;
   }
   // other staff
}

实际上我在代码中丢失了一些错误并且它说方法中的exact行抛出java.lang.NullPointerException?!

4 个答案:

答案 0 :(得分:19)

不,在任何情况下,该行都不会抛出NullPointerException

但这取决于你所说的“相似”。例如,如果您的实际代码行是

if (foo.str1 == null)

如果foo为空,您将获得NullPointerException。

答案 1 :(得分:10)

if (str1 == null)  

不会抛出NullPointerException。

if(str1.equals(null)) 

确实有这种可能性。

编辑:

如果您的堆栈跟踪引用了上面的行,那么您运行的代码很可能与您正在查看的代码不匹配。如果在编译和部署类之后对类进行了修改,则会发生这种情况,从而导致行号不匹配。

答案 2 :(得分:4)

没有

if (str1 == null)

不能抛出空指针异常,因为没有指针被解除引用。

类似的

if (obj1.getStr1() == null)

可以在obj1 == null或

的情况下抛出NPE
if (str1 == null && str1.length() == 0)
当str1 == null时,

将在str1.length()上抛出一个NPE。 (在这种情况下,应该使用||运算符。)

你能说明它破坏的确切线并包括堆栈跟踪吗?

答案 3 :(得分:3)

如果你有字节码操作,例如在OSGi组件中,可以使用代理的getter方法替换字段访问。如果在丢弃基础组件后访问字段,则字段访问将抛出NPE,因为它已被替换为以下内容并且thisObject设置为null。

if (thisObject.getStr1() == null)
顺便说一句:我今天遇到了一个与这个问题有关的错误。 :P