我有点困惑:我有一个函数,它将一个对象作为参数。但编译器不会抱怨,如果我只是传递一个基元,甚至可以将布尔基元识别为布尔对象。为什么?java:布尔instanceOf布尔?
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"
注意一个布尔值从来不是布尔的一个实例。你永远不能将一个原语传递给instanceof操作符。你的布尔原语从来没有进入这个方法,当调用发生和方法调用转换发生时,会发生装箱! – Mishax 2013-03-19 06:10:52