字符串comparisions

可能重复:
A better way to compare Strings which could be null字符串comparisions

我有一个if条件,看起来像这样:

if(!str1.equals(str2)) 

{

---

---

---

}

其中str1和str2的是两个String对象。

有可能str1可能为空,下面的代码等同于上面的代码,以及处理空检查?

if(!(str1==null ? str2==null : str1.equals(str2))) 

{

---

---

---

}

谢谢!

回答:

是的,这将导致相同的结果。

更有点特殊:

  1. 如果str1空,这是正是一样的,因为它只是通过三元检查,以同样的表情像以前
  2. 如果str1为空,则它将变成检查以查看str2是否为也是为空。

而且由于您将整个三元表达式与前面的!包装在一起,所以其行为与以前相同。

如果你想成为一个更加清晰,你可以做str2==nullstr1str2之间的实际比较:str1==str2。由于其中一个值已经是null,因此它不是一个参考检查而不是一个适当的字符串相等性检查,并且最终在代码中更清晰一些(对我来说,无论如何)

与其他但已经提到,Apache Commons库已经包含了这种无效的平等功能,但它确实需要包含相当大量的库。另一方面,许多人认为Apache Commons功能应该被有效地视为Java本身的一部分,所以如果你想要额外的依赖性,你可以自己决定。

最后,该功能不是技术上等同,因为默认.equals()方法将抛出NullPointerException,而你的平等校验码不会。如果那是你正在寻找的行为(我认为它是这样),那么你很好,但它是需要注意的。

回答:

假设你想要两个空值相等,当然。根据您的方法,NullPointerException可能是正确的响应。你可以去了解

org.apache.commons.lang.StringUtils 

!StringUtils.equals(str1, str2);处理空值你以同样的方式为自己节省很多的输入工作。

回答:

使用三元运算符是一个非常愚蠢的做检查方式,它会让你阅读起来令人沮丧。只需使用AND。

if(str1 != null && !str1.equals(str2)) 

{

---

---

---

}

您不需要导入一个全新的库来执行空检查。

回答:

它看起来是正确的,如果你认为null s相等,并允许str2null。但是最好不要相信任何人,但要为所有可能的情况写一个测试。

回答:

如果您使用的是Java 7:

java.util.Objects.equals(str1, str2); 

回答:

是的,你的代码将进入if块仅如果字符串不相等(或只是其中之一为空或两者都不是零和不同)。

另一种方式来做到这一点是

if((str1 == null && str2 != null) || !str1.equals(str2)){ 

// Only executes when strings are unequal

}

这是一个品味的问题,有些人对三元经营者过敏。 (我喜欢他们)。

以上是 字符串comparisions 的全部内容, 来源链接: utcz.com/qa/265084.html

回到顶部