几天前,我遇到了一个令人着迷的场景,我找不到任何有关Java如何或为什么使以下情况发生的文档。(此代码段只是该错误的简化形式。)
@Test
public void test() {
boolean bool = false;
Integer intVal = Integer.valueOf(5);
Long longVal = null;
Long result = bool ? intVal : longVal;
System.out.println(" > " + result);
}
在上面的代码段中:
如果bool = true,则得到的值为'5';
但是如果bool = false,则在尝试评估三元运算时会得到空指针异常。不是打印语句。
为了解决这个问题,我只是将“结果”更改为
Long result = bool ? Long.valueOf(intVal) : longVal;
这样做,将给出我所需的预期行为:
如果bool = true,则得到的值为'5';
但是如果bool = false,那么您将获得'null'
现在有趣的部分是,如果将其拆分为普通的if / else语句,那么java不会让您编译
longVal = intVal;
但是它不能通过三元运算符来捕获。那么,Java在做什么以使其在原始代码段中为空点?
(java 11)