变量在equals两边的区别
我们来段代码
public void Test{
public static void main(String[] args){
System.out.pritnl("".equals(null));
System.out.printl(null.equals(""));
}
}
在System.out.pritnl("".equals(null));中
如果括号中的对象是空值,也会正常的运行,不会出现报错,返回 false
。
在System.out.printl(null.equals(""));中
如果所获取的数据对是一个空值,那将无法使用Object的equals,应为空对象没有equals方法,这样就会报空指针异常导致
看下源码
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
//判断anObject是否为String类型
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
我们也可以使用org.apache.commons.lang包下的StringUtils.equals(String str1, String str2)
方法,是StringUtils工具类中的方法,封装好而且可以忽略大小写进行比较
public static boolean equals(String str1, String str2)
{
return str1 != null ? str1.equals(str2) : str2 == null;
}
//忽略大小写进行比较
public static boolean equalsIgnoreCase(String str1, String str2)
{
return str1 != null ? str1.equalsIgnoreCase(str2) : str2 == null;
}