【问题标题】:Declaring boolean variable声明布尔变量
【发布时间】:2015-08-19 08:38:45
【问题描述】:

我刚刚看到另一个开发人员的代码。

private static boolean _menuNeedsUpdate = false;
private static Boolean _userIsLoggingIn = Boolean.valueOf(false);

我想知道这两个声明之间的区别。谁能解释一下?

【问题讨论】:

  • 一个是Java“原始类型”(boolean),另一个是Java“类”(Boolean)。您可以在此处阅读有关“包装类”(例如“布尔”)的更多信息:en.wikipedia.org/wiki/Primitive_wrapper_class
  • 主要的实际区别是Boolean可以设置为null,而boolean不能设置。
  • @SashaSalauyou I want to know the differences between these two declarations.
  • @sᴜʀᴇsʜᴀᴛᴛᴀ 我相信其目的是发现为什么开发人员将第一个变量声明为原始变量,将第二个变量声明为包装器。
  • @sᴜʀᴇsʜᴀᴛᴛᴀ 尽管如此,由于这些变量不是final,因此对于 OP 了解非原始 Boolean 的可能 null 状态可能是有用的信息。

标签: java android


【解决方案1】:

第一个是原始boolean,默认值为false

第二个是BooleanWrapper class,默认值为false

除此之外,我看不出有什么不同。

编辑:(谢谢@carsten @sasha)

除了声明之外,另一点值得一提的是,在第二个声明中,_userIsLoggingIn 的值可能会在稍后变为 null,而原语不能。

【讨论】:

  • 谢谢。我认为存在一些与内存消耗相关的差异。
【解决方案2】:

是的,您可以使用 Boolean/boolean 代替。

第一个是对象,第二个是原始类型

第一个,你会得到更多有用的方法

考虑到内存开销,第二个很便宜。

现在选择你的方式

【讨论】:

    【解决方案3】:

    第一个是 java 原语,第二个是包装布尔值的对象/引用类型。

    像这样在基元和对象之间进行转换称为装箱/拆箱。

    • 布尔值可以是yes或no。
    • 布尔值可以是yes、no或NULL。

    【讨论】:

      【解决方案4】:

      boolean 是字面量 true 或 false,而 Boolean 是布尔值的对象包装器。

      很少有理由在布尔值上使用布尔值,除非在需要对象引用的情况下,例如在列表中。

      Boolean 还包含静态方法 parseBoolean(String s),您可能已经知道了。

      更多信息: What's the difference between boolean and Boolean in Java?

      【讨论】:

        【解决方案5】:

        正如其他人所说,第一个声明是原始的,而第二个是包装类。

        我想补充一点,当使用 Java 5 或更新版本时,第二个声明会产生警告。 声明_userIsLoggingIn 喜欢

        private static Boolean _userIsLoggingIn = false;
        

        而不是

        private static Boolean _userIsLoggingIn = Boolean.valueOf(false);
        

        将使用Boolean.FALSE,避免创建新的布尔实例

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-26
          • 2015-01-11
          • 2014-08-22
          • 2021-05-22
          相关资源
          最近更新 更多