【发布时间】:2018-05-30 13:37:13
【问题描述】:
这段代码会抛出 NPE:
Integer wtf = false ? 1 : (Integer) null;
问题是,如果第二个或第三个操作数是 int,那么另一个也将转换为 int。 (根据JLS这部分的表格https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25)
我的第一个问题是,为什么要这样写规范?将值转换为更具表现力的选项(整数)而不是更原始的选项(整数)不是更有意义吗?为了防止这种极其混乱的错误?
第二个问题是,您可以在 Intellij 的评估表达式中成功地评估该表达式。结果将是分配了 null 的 wtf 对象。是错误,还是在某处指定它不符合 JLS?
【问题讨论】:
-
"第二个问题...是不是 bug" 是的,那将是 intellij 中的一个 bug。
-
仅供参考:Google 容易出错has a check for this。
-
如果 intellj 将其设置为 null,那么这绝对是一个错误,因为 eclipse 正确地抛出了空指针异常。 JLS为什么会这样?只有写过这个的人才能回答。也许是为了更好的性能。
-
很遗憾 JLS 的作者没有像 ISO 标准委员会 did for the C language 那样发布基本原理文件。
-
对于第二个问题,让我把它颠倒过来:是否有任何地方指定 IntelliJ“评估表达式” 符合 JLS 标准?还是只是假设?
标签: java intellij-idea ternary-operator jls