我们知道编译器不允许int roomCode = null;
。
然后,当代码2执行时,为什么代码1不会给出编译器错误。
代码1:
int roomCode = (childCount == 0) ? 100 : null;
代码2:
int roomCode = 0;
if(childCount == 0) roomCode = 100;
else roomCode = null; // Type mismatch: cannot convert from null to int
答案 0 :(得分:11)
我做了一些调试,发现在评估时
(childCount == 0) ? 100 : null;
程序调用Integer的方法valueOf
来评估null
。它返回一个Integer,并且作为一个Integer可以为null(而不是int),它会编译。好像你做的那样:
int roomCode = new Integer(null);
因此它与自动装箱有关。