Raj*_*ppa 2 java boolean-expression
以下代码片段抛出NullPointerException.我试图了解if条件的工作流程.如果只是true并且false是if条件的有效参数,为什么Java编译器不会抛出错误?
Boolean booleanFlag = null;
if(booleanFlag) {
System.out.println("Why this boolean flag code is executed?");
}
Run Code Online (Sandbox Code Playgroud)
这与Java的一个名为auto(un)boxing的功能有关.基本上,在编译器中,编译器将此代码转换为:
if (booleanFlag.booleanValue()) {
//..
}
Run Code Online (Sandbox Code Playgroud)
现在,如果是booleanFlag null,那么它会NPE 在运行时抛出.这就是Joshua Bloch所说的"autoboxing blurs,但不会消除原始类型和盒装等价物之间的鸿沟".
也许在初始化盒装原语编译器的这种特殊情况下,至少可以生成警告,但通常,生成这样的警告是不可能的.
Java编译器确实根据任何数据流分析提供错误(除了检查变量是否已初始化,并且在这种情况下,您已将其初始化为null).完全没有意识到价值booleanFlag必然null在执行中的那一点.
至于为什么,我只能推测语言作者知道这样的功能会给语言增加太多的复杂性,并且会给编译器带来太多的性能成本.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |