正在回答
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。

如果解答了同学的疑问,望采纳~
祝学习愉快~
4. SSM到Spring Boot入门与综合实战
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星