我是否需要在OR条件的两边检查null?

时间:2011-09-04 18:25:42

标签: java string null is-empty

考虑成员变量:

String foo;

如果先前未设置setFoo或当前为空,我只想致电foo

为此目的,我不确定这是否足够:

if(foo==null || foo.isEmpty()) {

  setFoo(foo);

}

或者在OR条件的另一侧检查null是否更安全:

if(foo==null || (foo!=null && foo.isEmpty())) {

  setFoo(foo);

}

5 个答案:

答案 0 :(得分:11)

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

在Logical OR条件下,如果第一部分为false,Java将仅评估第二部分。

答案 1 :(得分:3)

不,第一个片段没问题。

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

答案 2 :(得分:1)

欢迎使用Stack Overflow

Java中的||&&等运营商是短路运营商, 只有当第一部分不足以确定值

时,才会检查表达式的第二部分

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

答案 3 :(得分:0)

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

工作正常。在这种情况下,如果foo为空,则会调用setFoo(foo)。如果foo不为空且foo为空,则也会调用setFoo(foo)

答案 4 :(得分:0)

我发现使用StringUtils.isBlank(foo)(来自apache commons-lang)更优雅,所以你不需要||一点都不。