【问题标题】:Java handling of Boolean and NULLJava 处理 Boolean 和 NULL
【发布时间】:2015-08-04 09:39:27
【问题描述】:

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

【问题讨论】:

  • 显然 null 不能等于任何有效的非 null 引用。
  • null 怎么可能等于任何其他值?第二个你正在创建对象new Boolean(null)
  • new Boolean(null) 表示创建的布尔对象,其值为false。

标签: java boolean


【解决方案1】:

这是因为Boolean 的构造函数,如果提供null 将分配一个布尔对象,表示值false

在这里阅读:http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html

公共布尔值(字符串 s)

如果字符串为真,则分配一个布尔对象,表示值为真 参数不为空,并且在忽略大小写的情况下与字符串相等 “真的”。否则,分配一个表示该值的布尔对象 错误的。示例: new Boolean("True") 产生一个布尔对象,它 代表真实。 new Boolean("yes") 产生一个布尔对象 代表虚假。参数:s - 要转换为的字符串 布尔值。

【讨论】:

    【解决方案2】:

    如果您查看Booleanclass 的源代码,您可以看到传递null值返回false

    private static boolean toBoolean(String name) { 
        return ((name != null) && name.equalsIgnoreCase("true"));
     }
    

    【讨论】:

    • 我不知道你当时使用的是什么版本,但在 1.8 中有public static boolean parseBoolean(String s) { return ((s != null) && s.equalsIgnoreCase("true")); }
    猜你喜欢
    • 2011-12-08
    • 2011-09-07
    • 2011-05-25
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多