关于String类中重写的equals()方法


关于String类中重写的equals()方法


前言


首先承接前一篇关于浅析equals和==运算符中提到的关于String类中重写equals()方法


  • 先上一盘代码,让你尝尝:

public class Equals {
public static void main(String[] args) {
Equals e1 = new Equals();
Equals e2 = new Equals();
System.out.println(e1 == e2);
System.out.println(e1.equals(e2));
String s1 = new String();
String s2 = new String();
System.out.println(s1.equals(s2));
Equals e3 = e2;
System.out.println(e3.equals(e2));
}
}
运行结果:
false
false
true
true


首先我们来分析一下上面的结果:
-首先“==”运算符在java中如果是用于两个对象的引用的话,那么只有当这两个引用指向同一个内存地址(同一块堆空间),才能返回true。
-Equals 类是继承了Object类的,此时Equals 的对象e2调用的equals()方法是弗雷Object类中的方法,而在Obejct类中的equals()方法是这样写的:

public boolean equals(Object obj){
return (this == obj);
}


所以equals()方法的实现原理与“==”运算符一样,所以返回了与e1一样的值false;
但是String类中重写了equals()方法,它的方法体满足了:只要两个引用所指向的对象时两块含有一样的字符串的话,那就返回true。
在最下面的一个true也是这个原因:直接把e2的引用赋给了e3,所以两个引用指向同一块内存。所以e2=e3;所以虽然equals()方法没有重写,也是返回true。

  • String类重写的equals()方法源代码:

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n– != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}

 - 解释:它首先判断的是两个对象的引用是否指向同一内存地址,是的话就返回true ,否则继续往下走,往下走时,判断是否为String类的对象,然后比较两个字符串的长度和内存,当都相等的时候就返回true ,否则返回false。

很明显,它比较的就是两个对象的引用所指向的内存地址。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HuaCode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值