java: 布尔实例布尔值?

2022-09-02 23:52:14

我有点困惑:我有一个函数,它把一个对象作为参数。但是,如果我只是传递一个基元,甚至将布尔基元识别为布尔对象,编译器也不会抱怨。为什么会这样?

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"

答案 1

因为基元 '' 将被自动装箱到 并且它是 .trueBooleanObject


答案 2

就像之前的答案说的,它被称为自动装箱。

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

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

您可以查看 JDK 文档以获取更多信息。