java:boolean instanceOf Boolean?
我有点困惑:我有一个函数,它以Object作为参数。 但是,如果我只传递一个原语甚至将布尔基元识别为布尔对象,编译器就不会抱怨。 为什么?
public String test(Object value) { if (! (value instanceof Boolean) ) return "invalid"; if (((Boolean) value).booleanValue() == true ) return "yes"; if (((Boolean) value).booleanValue() == false ) return "no"; return "dunno"; } String result = test(true); // will result in "yes"
因为原始的’ true
‘将被自动装箱为Boolean
而它是一个Object
。
就像以前的答案所说的那样,它被称为自动装箱。
实际上,在编译时, javac
会将你的boolean
primitve值转换为一个Boolean
对象。 请注意,通常,反向转换可能会生成非常奇怪的NullPointerException
,例如,由于以下代码
Boolean b = null; if(b==true) <<< Exception here !
您可以查看JDK文档以获取更多信息。
这部分方法:
if (((Boolean) value).booleanValue() == true ) return "yes"; if (((Boolean) value).booleanValue() == false ) return "no"; return "dunno";
可以替换为
if (value == null) return "dunno"; return value ? "yes" : "no";
它被称为autoboxing – java 1.5的新function
http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html