我想比较两个字符串是否相等,当其中一个或两个都可以为空时。
因此,我不能简单地调用.equals(),因为它可以包含空值。
到目前为止,我尝试过的代码:
boolean compare(String str1, String str2) {
return ((str1 == str2) || (str1 != null && str1.equals(str2)));
}
检查包括空值在内的所有可能值的最佳方法是什么?
我想比较两个字符串是否相等,当其中一个或两个都可以为空时。
因此,我不能简单地调用.equals(),因为它可以包含空值。
到目前为止,我尝试过的代码:
boolean compare(String str1, String str2) {
return ((str1 == str2) || (str1 != null && str1.equals(str2)));
}
检查包括空值在内的所有可能值的最佳方法是什么?
当前回答
从Java 7开始,你可以使用静态方法Java .util. objects。equals(Object, Object)对两个对象执行相等检查,而不关心它们是否为空。
如果两个对象都为空,则返回true,如果一个为空,另一个为空,则返回false。否则,它将返回在第一个对象上调用equals的结果,并将第二个对象作为参数。
其他回答
对于那些不能使用API 19的对象的android用户。等于(str1, str2)
android.text.TextUtils.equals(str1, str2);
它是空安全的。它很少需要使用更昂贵的String .equals()方法,因为由于android的字符串池,android上相同的字符串几乎总是与“==”操作数比较为真,长度检查是过滤大多数不匹配的快速方法。
源代码:
/**
* Returns true if a and b are equal, including if they are both null.
* <p><i>Note: In platform versions 1.1 and earlier, this method only worked well if
* both the arguments were instances of String.</i></p>
* @param a first CharSequence to check
* @param b second CharSequence to check
* @return true if a and b are equal
*/
public static boolean equals(CharSequence a, CharSequence b) {
if (a == b) return true;
int length;
if (a != null && b != null && (length = a.length()) == b.length()) {
if (a instanceof String && b instanceof String) {
return a.equals(b);
} else {
for (int i = 0; i < length; i++) {
if (a.charAt(i) != b.charAt(i)) return false;
}
return true;
}
}
return false;
}
您可以像下面那样使用java.util.Objects。
public static boolean compare(String str1, String str2) {
return Objects.equals(str1, str2);
}
boolean compare(String str1, String str2) {
if(str1==null || str2==null) {
//return false; if you assume null not equal to null
return str1==str2;
}
return str1.equals(str2);
}
这是你想要的吗?
boolean compare(String str1, String str2) {
if (str1 == null || str2 == null)
return str1 == str2;
return str1.equals(str2);
}
boolean compare(String str1, String str2) {
return (str1==null || str2==null) ? str1 == str2 : str1.equals(str2);
}