==和equals的区别是什么
来源:3-1 String与字符串常量池
学习中的傅山
2019-11-27 10:34:46
???????????
1回答
同学你好。
1、==比较的是内存中的地址是否相等,也就是引用是否相等。
s3和s4在编译期间就可以确定字符串内容是一样的,所以它们指向的是常量池中的同一个String对象,所以引用相等。
而s4和s5,由于s5在编译期间无法确定值,所以只能给s5新开辟一个地址,而不是指向常量池的某个对象,所以s4和s5是引用不相等的。
2、对于没有重写过equals方法的一般引用类型,使用的是从Object继承来的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}实际上和直接使用“==”比较没什么不同。
3、而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方法比较的是它们代表的值是否相等。s4与s5进行equals比较,比较的是值,所以返回true。

如果解答了同学的疑问,望采纳~
祝学习愉快~
相似问题