已知Object为对应包装类实例且非空,两种场景下转基本类型是否安全?
两种Object转基本类型场景的安全性分析
场景1
Object obj = ???; // unknown value for obj boolean b; if (obj != null && obj instanceof Boolean) b = (boolean) obj;
这段代码始终安全。原因如下:
- 先通过
obj != null排除空指针风险,再用obj instanceof Boolean确保obj是Boolean类型实例——由于Boolean是final类,不存在子类,这个判断和obj.getClass() == Boolean.class效果完全一致。 - 将
Boolean对象强制转为boolean基本类型时,Java会自动执行拆箱操作,把包装类对象转换成对应的基本类型值,不会抛出类型转换异常。
场景2
Object obj = ???; float f; if (obj != null && obj.getClass().equals(Float.class)) f = (float) obj;
这段代码始终安全。理由如下:
obj != null避免了空指针,obj.getClass().equals(Float.class)精准判定obj的类型就是Float(Float是final类,没有子类,不会出现子类匹配的误判)。- 将
Float对象强制转为float基本类型时,Java会自动拆箱,把包装类对象转换为对应的基本类型数值,不会出现类型转换错误。
内容的提问来源于stack exchange,提问作者labradorEater
相关产品推荐
相关产品推荐

