java - Null 检查时出现 NullPointerException

标签 java

我搞砸了下面的代码,无法区分这两个代码片段:

String Check=null;

if(Check!=null && Check.isEmpty()){
  System.out.println("Get Inside");
}

以上代码运行良好并打印消息。

if(Check==null && Check.isEmpty()){
  System.out.println("get Inside")
}

此代码将抛出 NullPointerException。无法区分此代码请帮助。

最佳答案

&& 运算符是一个短路,如果没有必要,它不会计算右侧。在这种情况下,有必要:

if(Check==null && Check.isEmpty()){
  System.out.println("get Inside")
}

如果Checknull(确实如此),你将继续检查&&之后的条件,你得到Check.isEmpty()。因为 Checknull,所以它就像是一个 NEP 的 null.isEmpty()

为什么?

当两个表达式之间有&&时,如果第一个为false,则答案永远为false,另一方不会被检查,但是当第一个为true时,您必须继续并检查另一侧,以了解是否所有表达式都应评估为 truefalse

但是当你有:

if(Check!=null && Check.isEmpty()){
     System.out.println("get Inside")
}

那么右侧将无法到达,因为检查它是多余的。你已经得到了false,不管你在右边得到true还是false,结果都是 false 因为这是一个 AND (FALSE && WHATEVER = FALSE)。那么为什么要检查呢?

This link可能对你有帮助。

(我建议您遵循 Java Naming Conventions 并使变量以小写字母开头)。

关于java - Null 检查时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16638694/

相关文章:

java - 如何在 SonarQube 中抑制警告 'Source files should not have any duplicated blocks'?

java - 我们可以使用 Java 中的 Tabula 提取 PDF 表格之间的文本吗?

java - 有没有一种简单的方法可以找到时间复杂度?

java - Like 子句中的 MySQLSyntaxErrorException 错误

java - 在没有管理员权限的 Windows 10 上安装 Weblogic 12.2.1.3

java - 在 Android 中返回到上一屏幕?

java - 使用 Java 压缩 ZIP 中的大文件

java - Firebase 数据库和 Firebase Firestore 数据操作和检索数据的问题

java - 如何从 thymeleaf 中的两个部分创建链接?

java - Pebble 仅在第一次接受数据