Java && 运算符

Java && operators

我正在尝试制作简单的 if 语句,我需要查看我的两个字符串的值是否不为空(不等于“”)。 我使用 && 运算符,但遗憾的是,如果它不为空,它只会正确检查一个字符串,如果第二个字符串为空,则他通过。让 && 对我有点没用。

if ( StringUtils.isNullOrEmpty(name) && StringUtils.isNullOrEmpty(sname)
            ) {do something}

我需要对它们进行正确检查。如果至少有一个字符串为空 return false 。 如果两者都不为空 return true。

当前,如果两个字符串都为 null 或空,则您的条件为真。

如果您希望 not 都为 null 或为空,您需要:

if ( !StringUtils.isNullOrEmpty(name) && !StringUtils.isNullOrEmpty(sname)
        ) {do something}

&& 很聪明,如果第一个条件为假,它不会尝试第二个。 使用 & 可以达到你想要的效果。

问题是你的支票有误。您希望它仅在两者都为空时才通过。

所以你应该去

if ( !StringUtils.isNullOrEmpty(name) && !StringUtils.isNullOrEmpty(sname)
        ) {do something}

或者如果你想在其中一个为空的情况下在 if 语句中捕获它,你应该使用 or:

if ( StringUtils.isNullOrEmpty(name)|| StringUtils.isNullOrEmpty(sname)
        ) {do something}
如果名称为空,

isNullOrEmpty 将 return 为真,但您希望它不为空,因此使用 !.

否定条件
if ( !StringUtils.isNullOrEmpty(name) && !StringUtils.isNullOrEmpty(sname)
        ) {do something}

另一种选择是:

if (!(StringUtils.isNullOrEmpty(名字) || StringUtils.isNullOrEmpty(名字) )) {做某事}

但是,以上不是推荐的编码风格,因为很难捕捉到!隐藏在该行之前,代码读者可能会感到困惑。

关于||和 && 运算符优化检查:

||从左到右检查第一个真条件并跳过任何进一步检查是否找到一个真条件。

&& 从左到右检查第一个错误条件,如果发现一个错误条件,则跳过任何进一步检查。

起初我觉得它没有任何意义,而且它没有用。直到那时我才意识到我需要翻转 return 语句。

if (!StringUtils.isNullOrEmpty(name) && !StringUtils.isNullOrEmpty(sname)) {
        System.out.println("ok");
        return true;}
else {
        System.out.println("empty names");
        return false;
    }

现在似乎工作得很好。

使用 '&' 作为 logical operator 你可以做以下事情。这里我们没有使用StringUtils -

if(   ( null!=name && !name.isEmpty() ) &   
( null!=sname && !sname.isEmpty() )   ){do something}