当前位置: 首页 > 面试题库 >

NullPointerException来自布尔

蒋骏
2023-03-14
问题内容

这是我认为的Java纯粹主义者之一。最近,我遇到了一种将字符串值自定义解析为布尔值的方法的问题。一个足够简单的任务,但是由于某种原因,以下方法在空情况下抛出NullPointerException……

static Boolean parseBoolean(String s)
{
    return ("1".equals(s) ? true : ("0".equals(s) ? false : null));
}

该方法的返回类型为布尔值,那么为什么或如何引发NullPointerException?从调试开始,似乎在嵌套的嵌入式条件语句评估为null并向外部嵌入式条件语句返回null的时候抛出了异常,但是我无法解释为什么。

最终,我放弃并重写了如下方法,该方法可以按预期工作:

static Boolean parseBoolean(String s)
{
    if ("1".equals(s)) return true;
    if ("0".equals(s)) return false;

    return null;
}

以下代码介于两者之间,并且可以按预期工作:

static Boolean parseBoolean(String s)
{
    if ("1".equals(s)) return true;

    return "0".equals(s) ? false : null;
}

问题答案:

这也适用:

static Boolean parseBoolean(String s)
{
    return ("1".equals(s) ? Boolean.TRUE : ("0".equals(s) ? Boolean.FALSE : null));
}

因此,获得NPE的原因是由于自动装箱,因为boolean在三元运算符中使用会导致将表达式的结果视为boolean。并取消装箱null会导致NPE。



 类似资料:
  • 我有一个简单的JavaFXML应用程序,它有一个按钮和一个文本区 我试图从另一个类(不是控制器)写入文本区域 如果不将文本区域发送到该类, 我在我的控制器类上添加了一个getter,并在写类上创建了一个控件类的对象 然后尝试写文本区,我得到了一个java。lang.NullPointerException和java。朗,反思一下。调用目标异常

  • 额外的问题,如果这不是设计的,我如何帮助解决这个问题?我能在Spring吉拉提这个吗? 编辑:已确认的问题,正在处理票据

  • 我试图使用注释和ConstraintValidator接口创建自定义bean验证。目的是使模型的名称独一无二。我不知道为什么,但是当我提交表单以便添加产品时,会抛出NullPointerException。 我的root-context.xml文件:

  • 那里是自定义验证器: 当我调用时,我在插入的的上得到了一个。 我假设Spring会正确地注入定制验证器,我必须告诉他。但是,我不知道怎么做。我已经尝试了一些通过堆栈溢出和谷歌找到的东西,但没有运气。 任何帮助都将不胜感激。

  • 我正在尝试为Vertx web客户端编写一个包装器,以便使用reactivestreams中的Publisher从服务器加载响应正文: 此解决方案是不正确的,因为它通过调用以阻塞方式读取所有正文字节。 是否可以分块读取来自Vertx网络客户端的响应,并将其转换为发布者(或Rx可流动的)?

  • 我不确定如何处理这个问题,http响应状态取决于我需要阅读的主体。我有这样的想法: 但为了获得阅读正文所需的状态,我看不到任何使用发布者提供的值的选项。我如何使其能够调用上面的方法,并在创建NetYoutBound时使用该状态