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