Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 三值运算符中不需要的空指针异常(可选)_Java_Java 8_Optional - Fatal编程技术网

Java 三值运算符中不需要的空指针异常(可选)

Java 三值运算符中不需要的空指针异常(可选),java,java-8,optional,Java,Java 8,Optional,据我所知,以下代码不应该抛出空指针异常,因为我正在安全地使用可选接口 然而,当我运行这段代码时,它抛出了NPE 如果我的代码中有错误,请告诉我,并帮助我纠正错误。您肯定会得到NullPointerException,因为您的右手边只是一种非常冗长的表示null的方式。您正在将null包装在可选文件中,从而强制执行的orElse为null 在解析为int的语句中使用null,正如@Hoopje所解释的,即使它被分配给整型变量,也会导致NullPointerException 仅在可选文件中包装nu

据我所知,以下代码不应该抛出空指针异常,因为我正在安全地使用可选接口

然而,当我运行这段代码时,它抛出了NPE


如果我的代码中有错误,请告诉我,并帮助我纠正错误。

您肯定会得到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);