【发布时间】:2011-05-02 00:49:46
【问题描述】:
可能的重复:
Booleans, conditional operators and autoboxing
Java, Google Collections Library; problem with AbstractIterator?
下面的代码产生一个 NPE:
Integer test = null;
Integer test2 = true ? test : 0;
System.out.println(test2);
要正确打印出“null”而无异常需要此代码:
Integer test = null;
Integer test2 = true ? test : (Integer)0;
System.out.println(test2);
在第一个示例中很明显“test”正在被拆箱(转换为原生 int),但为什么呢?为什么更改三元运算符中的另一个表达式(如第二个示例)会修复它?谁能提供某种叙述,说明这两个示例中的内容究竟是什么时候、什么以及为什么被装箱和拆箱?
【问题讨论】:
-
或者[Java, Google Collections Library;抽象迭代器的问题? ](stackoverflow.com/questions/1821510/…),专门针对
int。 -
仍然没有人回答(对于这个特定示例)何时以及什么被装箱和自动装箱的顺序。
-
首先,
test被取消装箱,因为test和0之间的二进制数字提升。第二,演员表0。
标签: java autoboxing