如何在java中检查null值
在这段代码中。
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
。
假设传递给testFun
的实际参数的值是从某个进程生成的。 假设该进程错误地返回null值并将其提供给testFun。 如果是这种情况,如何validation传递给函数的值是否为null?
一个(奇怪的)解决方案可能是将forms参数分配给函数内的某个变量,然后对其进行测试。 但是如果有许多变量传递给函数,那可能会变得乏味且不可行。 那么,在这种情况下如何检查空值?
编辑:我错误地写了|| 而不是| 在if条件下。 现在生成运行时exception
编辑显示了正常工作的代码与不工作的代码之间的区别。
此检查始终评估两个条件,如果str
为null则抛出exception:
if (str == null | str.length() == 0) {
而这(使用||
而不是|
)是短路的 – 如果第一个条件的计算结果为true
,则不评估第二个条件。
有关||
的说明,请参见JLS的第15.24节 和二进制|
第15.22.2节 。 第15.24节的介绍是重要的一点:
条件或运算符|| 运算符就像| (§15.22.2),但仅在其左侧操作数的值为false时才计算其右侧操作数。
这里的问题是在你的代码中程序调用’null.length()’,如果传递给函数的参数为null,则不会定义该函数。 这就是抛出exception的原因。
问题是您使用的是按位或运算符: |
。 如果使用逻辑或运算符, ||
,你的代码将正常工作。
也可以看看:
http://en.wikipedia.org/wiki/Short-circuit_evaluation
Java中&和&&的区别?
您可以使用StringUtils
:
import org.apache.commons.lang3.StringUtils; if (StringUtils.isBlank(str)) { System.out.println("String is empty"); } else { System.out.println("String is not empty"); }
看看这里: StringUtils.isBlank()vs String.isEmpty()
isBlank
示例:
StringUtils.isBlank(null) = true StringUtils.isBlank("") = true StringUtils.isBlank(" ") = true StringUtils.isBlank("bob") = false StringUtils.isBlank(" bob ") = false