16

可能重复:
Java 中棘手的三元运算符 - 自动装箱

我们知道int roomCode = null;编译器不允许这样做。

那么为什么代码 1 没有给出编译器错误,而代码 2 给出了。

代码 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
4

1 回答 1

11

我做了一些调试,发现在评估时

(childCount == 0) ? 100 : null;

程序调用valueOfInteger 的方法来评估null. 它返回一个 Integer,因为 Integer 可以为 null(而不是 int),所以它可以编译。就好像你在做类似的事情:

int roomCode = new Integer(null);

所以它与自动装箱有关。

于 2012-02-23T06:03:20.390 回答