Object类的equals方法时和==的效果是一样的,在比较引用数据类型的时候,是比较的地址,但是String类的时候,却是比较的是内容,这是为什么了?这的跟踪源代码看看,
String的equals方法重写了父类Object的equals方法,让比较的是否是内容相同,而不是地址值是否相同
- public boolean equals(Object anObject) {
- if (this == anObject) {//如果是同一个对象,返回true
- return true;
- }
- if (anObject instanceof String) {//判断是否是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类的源代码可以看出,String类重写了Object类中的equals方法,代码中比较的就是String中存储的内容是否相同,所以在调用String类的equals方法的时候,比较的是内容是否相同。
|
|