日常随笔之 ==和equals的区别

1.==和equals的区别

“==”如果变量是基本类型则比较的是数值是否相等;如果是引用类型的变量,则比较的是所指对象的地址是否相等。

举个栗子:
int a = 123;
long b =123l;
ab;//true
String a = new String(“123”);
String b = new String(“123”);
a
b; //false

equals不能作用于基本数据类型变量,如果其他类在继承Object类之后,如果没有对equals重写的话,那么比较的是引用类型的变量所指向的对象地址;String,Date,Integer(基本数据类型几乎都重写了equals)类对equals方法进行了重写,比较的就是对象的内容了。
举个栗子:
String a = new String(“123”);
String b = new String(“123”);
a.equals(b);//true

2.什么时候我们需要重写equals?

Set的元素都是引用类型的时候,为了确保不重复,我们需要重写equals

3.怎么重写equals方法?

重写equals之前,必须先重写hashcode方法,因为实现比较的两个对象的hash值是否相等,再判断值。如果x.equals(y),那么x,y的hashcode值一定相等,反则不一定。

4.为什么重写equals方法就一定要重写hashcode呢?
比方说HashSet它的底层实现是HashMap,在加入第10001个引用类型数据的时候,要想数据不重复,我们就要拿这个新元素去和前面的10000个元素进行比较,效率是非常的低;所以我们引入了hashcode,它就是为了查找元素更快捷诞生的,我们先用hashcode取个模,然后把它固定到某个位置,如果这个位置不存在其他的元素,就创建这个对象;如果这个位置有其他元素,就继续调用equals,如果有相同元素就不用再创建,如果没有相同元素就创建。这样效率得到了大幅度的提升。

5.hashcode是啥?
hashcode是为了查找快捷而产生的,在散列存储结构中存储对象的。
如果两个对象相等,那么hashcode值一定相等。
如果hashcode相等,只能说明,这两个对象在散列存储结构的存储位置相同。
如果要重写equals那么要先重写hashcode;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值