标签:字符串 比较 赋值 源码 情况下 ring 为什么 not 数据
先说”==”:再来看”equals”:
Equals方法是在Object类中定义的,所有的类都继承于Object类,所以所有的类都有equals方法。
我们来看看equals方法的源码:
public boolean equals(Object obj) {
return (this == obj);
}
可以看到在Object类的equals方法中也是用的”==”来进行比较,所以在进行比较时它和”==”应该时等价的,但是为什么我们在做 字符串比较的时候 两者比较出来的结果不一样呢?
原因就是 String类型对equals方法进行了重写。我们来看源码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
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;
}
从源码我们可以看出,在String的equals方法中对字符串的字符进行了逐一比较如果都相同则返回true.所以对于String中的equals方法比较的是两个字符串的内容对于:
String a = new String(“abc”) ; String b = new String(“abc”);
由于a和b的内容相同,返回true.
总结:
标签:字符串 比较 赋值 源码 情况下 ring 为什么 not 数据
原文地址:https://blog.51cto.com/11583017/2430452