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

if语句检查是否为null,但仍然抛出NullPointerException

潘鸿文
2023-03-14
问题内容

在此代码中。

public class Test {
     public static void testFun(String str) {
         if (str == null | str.length() == 0) {
             System.out.println("String is empty");
         } else { 
             System.out.println("String is not empty");
         }
     }
     public static void main(String [] args) {
         testFun(null);
    }
}

我们null向函数传递值testFun。可以正常编译,但是NullPointerException在运行时提供了一个我没想到的。为什么它引发异常,而不是评估if条件true并显示“字符串为空”?

假设传递给实际参数的值testFun是从某个进程生成的。假定该null进程错误地返回了一个值并将其馈送到testFun。如果是这种情况,如何验证传递给函数的值是否为null?

一种(奇怪的)解决方案可能是将形式参数分配给函数内部的某个变量,然后对其进行测试。但是,如果有许多变量传递给该函数,则可能变得乏味且不可行。那么,在这种情况下如何检查空值呢?


问题答案:

所做的修改恰好显示了有效代码与无效代码之间的区别。

此检查始终评估 两个 条件,如果str为null 则抛出异常:

 if (str == null | str.length() == 0) {

而这(使用||代替|)是 短路的 -如果第一个条件求值为true,则第二个条件不求值。

有关JLS的说明,请参见JLS的15.24

节;有关二进制文件||,请参见15.22.2节|。不过,第15.24节的简介很重要:

条件或运算符|| 运算符就像| (第15.22.2节),但仅当其左侧操作数的值为false时才评估其右侧操作数。



 类似资料:
  • 我正试图在android中创建一个干净的复选框代码,但如果我只是按下按钮而没有选中复选框,则会出错这是清理复选框的代码: 这是我在重置按钮上输入的代码 该复选框是一个声明: 显然,如果未选中复选框并出现错误,tem.getItemId为null。 注:如果你不知道答案或不明白,最好询问或继续,然后投否决票。让其他有帮助的人看到这个问题

  • 有可能做如下事情吗: 或者: 我知道用很多if-else语句也可以实现同样的目标,但如果它像上面那样工作,看起来会更干净。

  • 问题内容: 我的存储过程中的这段代码: 是类型。 执行此存储过程时,我提供了 表明 //如果是正确的 代替 它在sql中的某个函数中,用于验证字符串是否为null或为空, 或者 我在某个地方犯了错误? 就像在C#中-> 问题答案: 这是正确的行为。 如果将@设置为一个值,则下面的表达式为true 无论如何,在SQL Server中都没有这样的功能,但是您可以创建自己的功能:

  • 问题内容: 我想检查浏览器是否仍然存在,如果不存在,那么我想打开一个新的浏览器!网络驱动程序中是否有可用的api来检查浏览器是否仍然存在? 问题答案: 调用后,将driver的值设置为 但是,如果调用,它将驱动程序的值设置为 因此,如果您在调用 driver.quit() 之后检查浏览器窗口,则可以通过以下实现知道。

  • 我一直面临的问题是,一个页面中有25个div class=二级属性的元素,我正在尝试获取地址标签,但在这25个div元素中的一些元素中,地址标签可能根本不存在。 而跨度类 = 邻居将永远存在。如果有,我需要从地址中获取文本,否则我将从 span 类中获取文本 这是我在四处搜索后尝试过的代码,但它没有完成工作,因为它获得了整个站点的地址属性大小。 这些是我的原始代码。但是每当我遇到没有地址的div块

  • 问题内容: 我需要检查value是否定义为任何东西,包括null。将null值视为undefined并返回。以以下为例: 请注意,这是未定义的。 我需要找到满足以下条件的条件: 有任何想法吗? 问题答案: IIRC,您可以使用此功能: