【问题标题】:Casting boolean to Boolean in java在java中将布尔值转换为布尔值
【发布时间】:2010-10-20 12:36:45
【问题描述】:

我有一个代码

public class BooleanTest {
    public BooleanTest() {
        super();
    }


    public static void main(String args[]){
      BooleanTest bt = new BooleanTest();
      bt.doProcess();

    }

    private boolean method() {
        return false;
    }

    private void doProcess() {
      Boolean obj = (Boolean)method();
      System.out.println(obj.booleanValue());
    }
}

问题是System.out.println(obj.booleanValue());在任何情况下都可以抛出NullPointerException吗?

【问题讨论】:

  • 每次看到我都想知道为什么人们不写 args 构造函数并显式调用 super()。
  • 因为有人可能会添加另一个构造函数,而您希望确保 noarags 构造函数始终存在。因为它在逻辑上更明确。虽然我必须承认在说明性代码中 sn-p 它不是很有用。
  • 也不需要调用super()。

标签: java boolean casting


【解决方案1】:

不,当您将原始值装箱到其等效包装类型中时,结果永远不会为空。

【讨论】:

  • 这是因为原始类型永远不能为空。
【解决方案2】:

它永远不会抛出 NPE,而且如果您使用 java >= 1.5,则不需要强制转换它。它被称为自动装箱,是从 JDK 1.5 引入的。

【讨论】:

    【解决方案3】:

    没有

    原因:原语永远不会持有 null,因此将它们转换为 Wrapper 将永远不会导致 NPE,

    而且不需要种姓它会autobox

    【讨论】:

    • 这与默认值无关。这与原始类型是值类型这一事实有关 - int 变量的值是整数本身,而不是引用......那么它怎么可能是 null
    • @Jon,我提到默认值只是为了让 OP 明白在任何情况下原语都不会保持 NULL
    • life.java:对我来说,这比让事情更清晰更让人困惑。值类型和引用类型的区别与默认值关系不大。
    • @Jon 我也意识到在阅读了您的评论后,更新了答案。
    【解决方案4】:

    为了迂腐,您可能已将 System.out 设置为 null,然后该行将生成 NPE。

    但这很奇怪。

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 2013-07-30
      • 2018-01-24
      • 2019-07-24
      • 2014-10-11
      • 2017-03-07
      • 1970-01-01
      • 2021-06-27
      相关资源
      最近更新 更多