java中equals 和 == 的区别

在java中,== 用来表示变量之间存贮的值是否相等。

我们知道,在java中,变量有基本数据类型和复杂数据类型(对象)的变量。其中基本数据类型变量里存贮的就是变量的值,而复杂数据类型变量中存贮的是其引用的对象在内存中存放的地址。换句话说,就是 == 在比较基本数据类型,是比较这两个值是否相等,比如:int a = 10; int  b = 10;int c = 5 则 a == b 为true;a == c为false。而 == 在比较两个复杂型数据结构时,表示的是这两个变量所引用的对象在内存中的存贮地址是否相等,比如  Person zam = new Person(); Person lisi = new Person();Person wang = zam;那么zam == lisi 为false。因为zam和lisi的引用对象都是在内存中通过new 出来的对象,他们在内存中存放的位置也肯定是不一样的。而zam == wang 为true。因为通过 

Person wang = zam,就把zam引用的对象的地址也给了wang,即wang和zam都是引用同一个对象。

而equals()方法呢?我们先看下Object类中关于equals方法是如何实现的

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

从上面的源码可以看出,在object类中equals方法其实就是调用 == 来比较的。也就是说在object类中 equals方法和 == 其实是等价的。但是在很多object子类中有重载equals方法,使得它表示的内容发生了变化。比如我们最熟悉String类。String类通过重载equals方法,来比较两个字符串的内容是否相等。也就是String里的equals方法已经不再是比较两个对象的存放地址了,而是比较两个字符串的内容是否相等。

比如 String a = new String("abc"); String b = new String("abc");这时a == b 为false,但是a.equals(b) 为true。


所以对于没用重载equals方法的类来说,equals 和 == 是一样的。而对于重载了equals方法的类来说,就要看具体的equals方法的实现了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值