在OR条件中,我需要检查两侧的null吗?

4

考虑成员变量:

String foo;

我希望只在 foo 没有被设置或为空时才调用 setFoo
为此,我不确定以下代码是否足够:
if(foo==null || foo.isEmpty()) {

  setFoo(foo);

}

还是在 OR 条件的另一侧也检查 null 更安全呢?
if(foo==null || (foo!=null && foo.isEmpty())) {

  setFoo(foo);

}

检查一下可能会更容易、更快速和更启发性,对吧? :-) - Scorpion
5个回答

12

if(foo==null || foo.isEmpty())就足够了。

在逻辑或条件中,当第一部分为假时,Java才会计算第二部分。


2
在逻辑 OR 表达式中,只有一个条件为真时整个表达式才为真。而在位 OR 中,两个条件都会被计算。 - Mark Peters
顺便提一下,如果您要进行多个此类检查,将其提取到一个方法中始终是一个好主意。可以考虑使用 StringUtils 等工具类。 - Scorpion

4
不,第一个片段是正确的。
在Java(以及许多类似的语言,如C或C ++)中,逻辑运算符&&和||执行短路评估。在||的情况下,如果左操作数为true,则不会评估右操作数。

2

欢迎来到Stack Overflow

Java中的运算符,如||&&短路运算符,当第一部分足以确定值时,第二部分才会被检查。

因此,if(foo==null || foo.isEmpty())就足够了。


0
if (foo == null || foo.isEmpty()) setFoo(foo);

运行良好。在这种情况下,如果 foo 为 null,则会调用 setFoo(foo)。如果 foo 不为 null,并且 foo 为空,则也会调用 setFoo(foo)


0
我发现使用来自apache commons-lang的StringUtils.isBlank(foo)更加优雅,因此根本不需要使用||。

但是你必须在类路径上拥有Apache Commons... - Alexey Ivanov
是的,显然。所以将其放在那里,学习如何使用它并编写优美的代码 :)。 - Arnout Engelen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接