java中==和equals和hashcode的区别

1.==运算符用来比较两个变量的值是否相等,也就是说该运算符用于比较变量对应的内存中所存储的数值是否相等。也就是说,该运算符用于比较变量对应的内存中所存储的值是否相等,要比较两个基本类型的数据或两个引用变量是否相等,只能使用==
具体而言,如果两个变量是基本数据类型,可以直接使用==运算符比较其对应的值是否相等。如果一个变量指向的是一个对象(引用类型)那么,此时涉及了两个内存,对象本身占用一个内存(堆内存),变量也占用一块内存,例如对于赋值语句String s=new String ()变量s占用一块存储空间,而new String占用另一块存储空间,此时变量s所对应内存中存储的数值就是对象占用那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,既要看这两个变量所对应内存中数值是否相等(是否指向同一块存储空间),这时候就要用==运算符比较,但是要比较两个对象的内容是否相等,用==就不行啦

2.equals是object类提供的一个方法,每个java类都继承了Object类。即每个对象都有equals方法。Object中的equals方法直接调用==运算符,所以在没有被覆盖的情况下equals与==预算符一样,比较的是引用
相比==运算符,equals方法的特殊之处就是他可以被覆盖,所以可以通过覆盖的方法让他不是比较数据内容,例如String类的equals方法是用于比较两个独立对象的内容是否相同,即堆中的内容是否相同。
3.hashCode方法是从Object类中继承过来的,他也用来鉴定两个对象是否相等。Object中的hashCode()方法返回对象在内存中地址转化成int值,所以没有重写hashCode方法,任何对象的hashCode方法都是不相等的。

一般覆盖equals方法的时候也要覆盖hashCode方法,否则会违反Object.hashCode 的通用约定。从而导致无法与所有基于散列值(hash)的集合类(HashMap hashSet 和Hashtable)结合在一起正常运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值