字符串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))) {
---
---
---
}
谢谢!
回答:
是的,这将导致相同的结果。
更有点特殊:
- 如果
str1
不空,这是正是一样的,因为它只是通过三元检查,以同样的表情像以前 - 如果
str1
为为空,则它将变成检查以查看str2
是否为也是为空。
而且由于您将整个三元表达式与前面的!
包装在一起,所以其行为与以前相同。
如果你想成为一个位更加清晰,你可以做str2==null
到str1
和str2
之间的实际比较: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相等,并允许str2
为null
。但是最好不要相信任何人,但要为所有可能的情况写一个测试。
回答:
如果您使用的是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