参考:http: //java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html
“如果你的程序试图自动拆箱 null,它会抛出 NullPointerException。”
如果您尝试将 null 分配给布尔值,javac 会给您一个编译时错误。说得通。不过,将 null 分配给布尔值是可以的。也有道理,我猜。
但是让我们考虑一下在尝试自动拆箱 null 时会得到 NPE 的事实。这意味着您不能在没有空值检查或异常处理的情况下安全地对布尔值执行布尔运算。对整数进行数学运算也是如此。
很长一段时间以来,我都是 java1.5+ 中自动装箱的粉丝,因为我认为它让 java 更接近真正的面向对象。但是,在昨晚遇到这个问题之后,我得说我觉得这很糟糕。当我尝试使用未初始化的原语做一些事情时,编译器给我一个错误是一件好事。如果我丢失了,我不想使用自动装箱。
我想我可能误解了自动装箱的意义,但同时我永远不会接受布尔值应该能够有 3 个值。谁能解释一下?我没有得到什么?