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() : ""