Java 为什么会抛出NullPointerException?

Java 为什么会抛出NullPointerException?,java,Java,这会抛出一个NullPointerException,我不明白为什么。有人能解释一下吗?e是null 是否为enull 也许你应该试试这个: e.getCategory() != null ? e.getCategory().getName() : ""; 或者更确切地说,是一种简化形式: (e != null) ? (e.getCategory() != null) ? e.getCategory().getName() : "" : ""

这会抛出一个
NullPointerException
,我不明白为什么。有人能解释一下吗?

e
null

是否为
e
null

也许你应该试试这个:

e.getCategory() != null ? e.getCategory().getName() : "";
或者更确切地说,是一种简化形式:

(e != null) ?
    (e.getCategory() != null) ?
        e.getCategory().getName() : 
        ""
    : ""
找到解决方案

正确的

(e != null && e.getCategory() != null) ?
    e.getCategory().getName() : 
    ""
问题

bufo.append("\"category\":" + "\"" + ((e.getCategory() != null) ? e.getCategory().getName() : "") + "\",");
说明: 根据Java的优先规则,您的代码被解析为:

bufo.append("\"category\":" + "\"" + e.getCategory()!=null?e.getCategory().getName():"" + "\",");
将整个连接(
(“…”+e.getCategory())
!=null
)作为条件


由于
“…”+e.getCategory()
从不为
null
,因此代码不起作用。

(e.getCategory()!=null)返回false或true,并且从不抛出异常如果
getName()
内部存在问题,则不应调用它。。。到目前为止,category不是null假设这确实是导致异常的那一行,并且对getCategory()的第一次调用没有返回null,只有一个选项:getCategory()不一致,在第二次调用中返回null…请发布NullPointerException的完整堆栈跟踪。这应该有助于准确地揭示问题发生的位置。提示:在Java中,通常认为在大多数运算符的两侧都放置空格是一种良好的做法,如
=
。它使这样的代码更具可读性。-1用于发布不完整的代码,并且没有堆栈跟踪。+1用于尽可能做到最好,并且在面对评论者时持积极态度,使用他们的“高级”批评技巧,不仅没有提供有用的见解,而且至少提供一些原始的批评-我对starblue说我是个混蛋如果有陈述的话是有原因的<代码>如果(e!=null&&e.getCategory()!=null&&……。
但三元表达式更有趣!:-)出于某种原因,它似乎需要()它需要()因为否则您将测试字符串“category”:“null,而不是测试实际引用,实际引用为null。编译器假设您测试字符串连接的结果。这使得有时最好使用临时变量简化表达式。即使您知道运算符优先级规则,下一个读取代码的糟糕的slob也可能不知道……问题版本的计算结果似乎是:
bufo.append((“\”category\:“+”\”“+e.getCategory())!=null?e.getCategory().getName():“+”\”,”下次,至少发布出现问题的整行代码。对其他人来说,找出问题所在要容易得多。
(("\"category\":" + "\"" + e.getCategory()) != null) ? e.getCategory().getName() : ""