鉴于以下代码:
boolean c = true;
boolean d = true;
boolean b = c ? null : d;
System.out.println(b);
为什么编译器不在这里抱怨?变量 b 是原始数据类型,null 不应该产生诸如“类型不匹配:无法从 null 转换为布尔值”之类的错误消息吗?
我最好的猜测是,正在进行一些自动装箱?我在一个项目中看到了这段代码,但我很想知道这背后的确切原因......
EDIT1:正如下面提到的 Mena,这段代码在运行时产生一个 NullPointer
编辑 2:下面的形式也编译没有错误:
boolean c = false;
boolean d = true;
boolean b = c ? null : d;
System.out.println(b);
编辑 3:尝试使用编译器级别 1.4 进行编译时,这不会编译,但会产生错误:
Incompatible conditional operand types null and boolean.
所以自动装箱是有意义的,因为它是在 1.5 中引入的?
精慕HU
沧海一幻觉
神不在的星期二
相关分类