代码之家  ›  专栏  ›  技术社区  ›  epegzz

java:boolean实例?

  •  13
  • epegzz  · 技术社区  · 15 年前

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

    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 回复  |  直到 15 年前
        1
  •  32
  •   Jigar Joshi    15 年前

    因为原始的 true Autoboxed Boolean 哪一个是 Object .

        2
  •  3
  •   Jozef Dúc    8 年前

    就像前面的答案说的,这叫做自动装箱。

    实际上,在编译时, javac 会改变你的生活 boolean 将原始值转换为 Boolean NullPointerException 例如,由于以下代码

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

    JDK documentation 更多信息。

        3
  •  2
  •   Paul Tomblin    15 年前

      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";
    
        4
  •  1
  •   Adam Butler    15 年前