Java 三值运算符中不需要的空指针异常(可选)
据我所知,以下代码不应该抛出空指针异常,因为我正在安全地使用可选接口 然而,当我运行这段代码时,它抛出了NPEJava 三值运算符中不需要的空指针异常(可选),java,java-8,optional,Java,Java 8,Optional,据我所知,以下代码不应该抛出空指针异常,因为我正在安全地使用可选接口 然而,当我运行这段代码时,它抛出了NPE 如果我的代码中有错误,请告诉我,并帮助我纠正错误。您肯定会得到NullPointerException,因为您的右手边只是一种非常冗长的表示null的方式。您正在将null包装在可选文件中,从而强制执行的orElse为null 在解析为int的语句中使用null,正如@Hoopje所解释的,即使它被分配给整型变量,也会导致NullPointerException 仅在可选文件中包装nu
如果我的代码中有错误,请告诉我,并帮助我纠正错误。您肯定会得到NullPointerException,因为您的右手边只是一种非常冗长的表示null的方式。您正在将null包装在可选文件中,从而强制执行的orElse为null 在解析为int的语句中使用null,正如@Hoopje所解释的,即使它被分配给整型变量,也会导致NullPointerException
仅在可选文件中包装null,在再次展开时仍然会显示null。我找到了解决方法
final Integer inte = false ? (Integer)0 : Optional.<Integer>ofNullable(null).orElse(null);
由于文本0,三元运算符返回的类型应为int。得到NullPointerException的原因是表达式的类型为false吗?0:Optional.ofNullableInteger null.orElsenull是表15.25-C中的int
表达式Optional.ofNullableInteger null.orElsenull的计算结果为null,将null强制转换为int将导致NullPointerException。这不清楚,此代码甚至不会编译。你是把它赋给整型还是整型变量?@Joker那么我的答案是它不会抛出NPE。上面的代码无法编译,因为您试图调用整数int,int是一个语言关键字,这意味着它不能作为变量名使用…@Joker我可以问您同样的问题。当int是一个表示基元类型的关键字时,您认为int是Java中变量的有效名称吗?尊敬的,小丑。你是故意制造这样的谜语的吗?然后重新发布?这能回答你的问题吗?事实上,我做了测试,这是有道理的。另外,关于三元运算符:三元运算符返回包含在其第二或第三部分中的值或表达式。它不执行这些语句。因此在本例中,三元运算符的else部分返回null,但是编译器将返回类型计算为int,而不是Integer。NPE被抛出,因为返回了int null,这是不可能的。当类型转换为0到Integer时,返回值变为Integer null,这是可能的,这就是正在发生的事情。尊敬的,小丑。你是故意制造这样的谜语的吗?然后重新发布它们?作者正在为整数引用赋值null。我希望这澄清了问题。
final Integer inte = false ? (Integer)0 : Optional.<Integer>ofNullable(null).orElse(null);
final Integer inte = false ? (Integer)0 : Optional.ofNullable((Integer)null).orElse(null);