【问题标题】:Why Boolean always giving null为什么布尔值总是给 null
【发布时间】:2013-04-15 09:48:15
【问题描述】:

我写了以下代码

Boolean isit;

if(isit== true) {
    System.out.println("isit is true");
} else {
    System.out.println("isit is not false");
}

但它总是 null ,但它应该给出 false 为 default..

【问题讨论】:

  • boolean 默认为falseBoolean 像所有引用类型默认为null。恕我直言,除非您真的需要使用包装器,否则请使用原语而不是包装器。顺便说一句,您不能使用== 来比较布尔值,您需要使用等于,并且您也不会将它用于boolean,因为它是多余的。

标签: java oop syntax null boolean


【解决方案1】:

当你将它声明为Boolean(注意大写字母)时,它是一个对象,因此默认为null

我认为你的意思是让它成为 boolean,而不是 Boolean

此外,您可以使用boolean

boolean isit;
if (isit) {
    System.out.println("isit is true");
} else {
    System.out.println("isit is false");
}
//prints "isit is false"

【讨论】:

    【解决方案2】:

    与具有两种状态的boolean 原语不同,即truefalse,包装器Boolean 具有额外的第三状态null。当Boolean对象为null时,既不是true也不是false

    当您将对象与true 进行比较时,该值将被包装为Boolean,并与null 进行比较。结果是false。如果将其与false 进行比较,也会发生同样的事情,但是:下面的代码不会打印任何内容。

    Boolean isit = null;
    if (isit == true) { // true gets converted to Boolean.TRUE
        System.out.println("isit is true")
    }
    if (isit == false) { // false gets converted to Boolean.FALSE
        System.out.println("isit is false")
    }
    

    如果您的标志需要三个状态(truefalse 和“未设置”),您应该使用Boolean;如果您只需要两种状态(truefalse),您应该使用 boolean 的原始数据类型。

    【讨论】:

      【解决方案3】:

      您正在使用包装类object,然后永远不要忘记将其初始化为default 值。默认情况下,所有wrapper class 对象都初始化为null。

      你必须像初始化一样

        Boolean B =  Boolean.TRUE;   
        Boolean B = true; 
      

      或者取一个原始值

       boolean isit;  ///default false  
      

      【讨论】:

        【解决方案4】:

        您的代码将永远无法编译,它会给出类似The local variable isit may not have been initialized 的错误。

        Boolean 是一个包装类,而不是原始数据类型。因为你只是将变量初始化为

        Boolean isit;
        

        并且不分配任何它永远不会编译的值。
        但是,如果您使用原始类型布尔值,例如:

        boolean isit;
        

        那么如果你什么都没分配,那么默认情况下该值为 false。

        boolean isit;
        
        if(isit) {
            System.out.println("isit is true");
        } else {
            System.out.println("isit is false");
        }
        

        这将使 isit 值为 false。

        【讨论】:

        • 这是一个傻瓜,但if(isit) 更干净。 else 应该是 isit is false
        【解决方案5】:

        因为...

        输入:

        Boolean object;
        boolean primitive;
        
        System.out.println(object); 
        System.out.println(primitive); 
        

        输出:

        null
        false
        


        • Boolean 是一个对象。
          • 如果没有赋值,默认为null

        另一方面,

        • boolean 是原始类型。
          • 如果没有赋值,默认为false

        【讨论】:

          【解决方案6】:

          Boolean 是一个包装类对象。并作为 java 约定object's default value is always null。如果您使用带有 b 小写字母的布尔值,那么它被称为原语,并且它的值是您理解的值,默认为 false

          【讨论】:

            【解决方案7】:

            在这种情况下,您必须将 isit-variable 值初始化为 true/false,否则编译器不会让您编译代码,因为您在 IF 中使用 isit-variable 而不给它一些值。 在java中,一个变量必须在使用之前被初始化。

            【讨论】:

              猜你喜欢
              • 2011-01-29
              • 1970-01-01
              • 1970-01-01
              • 2022-11-08
              • 1970-01-01
              • 2011-09-18
              • 2016-01-19
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多