java:boolean instanceOf Boolean?

时间:2010-08-30 13:18:57

标签: java casting boolean primitive autoboxing

我有点困惑:我有一个函数,它将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"

4 个答案:

答案 0 :(得分:31)

因为原始的“true Autoboxed Boolean,而Object

答案 1 :(得分:3)

就像以前的答案所说的那样,它被称为自动装箱。

实际上,在编译时,javac会将您的boolean原始值转换为Boolean对象。请注意,通常,反向转换可能会产生非常奇怪的NullPointerException,例如,由于以下代码

Boolean b = null;
if(b==true) <<< Exception here !

您可以查看JDK documentation了解更多信息。

答案 2 :(得分:2)

这部分方法:

  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";

答案 3 :(得分:1)