在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?!
答案 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或
的情况下抛出NPEif (str1 == null && str1.length() == 0)
当str1 == null时,将在str1.length()上抛出一个NPE。 (在这种情况下,应该使用||
运算符。)
你能说明它破坏的确切线并包括堆栈跟踪吗?
答案 3 :(得分:3)
如果你有字节码操作,例如在OSGi组件中,可以使用代理的getter方法替换字段访问。如果在丢弃基础组件后访问字段,则字段访问将抛出NPE,因为它已被替换为以下内容并且thisObject设置为null。
if (thisObject.getStr1() == null)
顺便说一句:我今天遇到了一个与这个问题有关的错误。 :P