我可能会错过一些简单的解释,但下面一行会抛出一个NullPointerException:
Long sum = true
?
fiscalDocumentUtil.getFullValue(fiscalDocument.getInvoice())
:
(long) fiscalDocument.getReceipt().getAmount();
尽管
Long sum = true
?
fiscalDocumentUtil.getFullValue(fiscalDocument.getInvoice())
:
null
才不是。我还想提一下
fiscalDocumentUtil.getFullValue(fiscalDocument.getInvoice())
不会自行抛出异常,而
(long) fiscalDocument.getReceipt().getAmount()
做。
是否对第二方进行评估?还是我在屠杀什么?
编辑
评论中询问的一些附加信息:
fiscalDocumentUtil.getFullValue(fiscalDocument.getInvoice())返回 null。的返回类型fiscalDocumentUtil.getFullValue(fiscalDocument.getInvoice())是 Long。
的返回类型fiscalDocument.getReceipt().getAmount()是Integer。
如果我发出显式(长)转换,则行为是相同的。
编辑 2
一个最小的可重现示例:Long val =true ? (Long) null: Integer.valueOf(1);. MC Emperor 的回答部分暗示了这一点,评论部分暗示了这一点。当然,这个例子已经在一定程度上回答了这个问题,因为事实证明,第二个表达式不需要抛出异常。