equals和==有什么区别?

符号【==】比较的是什么?

对于基本类型和引用类型 ==的作用效果是不同的,两者比较如下

  • 基本类型:比较的是值是否相同;
  • 引用类型:比较的是引用是否相同;

equals方法比较的是什么?

equals方法用于进行对象的比较,若对象相等,则返回true,否则返回false。equals是定义于Object上的方法,其上面描述了equals方法要遵守的一些原则。如下所示:

  • 自反性 :对于任何非空的参考值x , x.equals(x)应该返回true 。
  • 对称性 :对于任何非空引用值x和y , x.equals(y)应该返回true,当且仅当y.equals(x)返回true 。
  • 传递性 :对于任何非空引用值x , y和z ,如果x.equals(y)返回true,且y.equals(z)返回true ,那么x.equals(z)应该返回true 。
  • 一致性 :对于任何非空引用值x和y ,多次调用x.equals(y)始终返回true或始终返回false。
  • 对于任何非空的参考值x , x.equals(null)应该返回false 。

关键点就在于如何认为对象是相等的,这个相等在不同的对象上可能是不同的。例如,在Object类上,它简单的认为引用相同的,对象就相同。所以Object上的==equals是一样的。但是在String上就不是这样的。String类认为,我保存的字符序列一样,就是一样的,不一定要引用相同才表示相同。看的出来String对equals的比较标准放宽了。Object类上也描述了,Object对象上的equals类方法是差别可能性最大的相等关系,说人话,就是用引用相等来表示相等,是最严格的比较了。
所以我们知道了,equals方法是用于比较对象是否相等的,有些对象上引用不相等,但是其保存的值相等,我也想让它们相等,怎么办?那就只有覆写equals方法。不过有一点要注意,在覆写了equals方法之后,也要同步修改hashCode方法。一方面是因为hashCode方法上明确表示了如果根据equals(Object)方法两个对象相等,则在两个对象中的每个对象上调用hashCode方法必须产生相同的整数结果;另一方面,在一些对象中,使用hashCode来判断是否是相同的对象,若hashCode跟equals方法不同步,则会出现问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
   ==和equals方法究竟有什么区别?   == 操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。   如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。   equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:     String a=new String("foo");     String b=new String("foo");   两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值