JAVA中的布尔对象可以有3个值True,False,NULL
public class First {
public static void main(String args[])
{
System.out.println("equals(new Boolean(\"True\"),True) :: " + isEqual(new Boolean("True"), true));
System.out.println("equals(new Boolean(\"False\"), new Boolean(null)) :: " + isEqual(new Boolean("False"), new Boolean(null)));
System.out.println("equals(new Boolean(\"False\"), null)) :: " + isEqual(new Boolean("False"), null));
}
static boolean isEqual(Boolean a, Boolean b)
{
return a.equals(b);
}
}
以上代码的输出
equals(new Boolean("True"),True) :: true
equals(new Boolean("False"), new Boolean(null)) :: true
equals(new Boolean("False"), null)) :: false
请解释为什么案例2返回true但案例3返回false
答案 0 :(得分:9)
那是因为Boolean
的构造函数(如果提供null
)将分配一个表示值false
的布尔对象
请在此处阅读:http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html
public Boolean(String s)
如果字符串,则分配一个表示值true的Boolean对象 参数不是null并且与字符串相同,忽略大小写 “真正”。否则,分配一个表示该值的Boolean对象 假。示例:new Boolean(“True”)生成一个布尔对象 代表真实。 new Boolean(“yes”)生成一个布尔对象 代表错误。参数:s - 要转换为的字符串 布尔值。
答案 1 :(得分:3)
如果查看Boolean
类的源代码,可以认为传递null
值会返回false
:
private static boolean toBoolean(String name) {
return ((name != null) && name.equalsIgnoreCase("true"));
}