Java中的 “==” 与 equals 的区别

Java中的 “==” 与 equals 的区别

1.“==”

在Java中有两大类数据类型,一类是基础数据类型共有八种分别是byte、 short、 int、 long、 float、 double、 char、boolean,另一类则是引用数据类型,例如String、Integer等等。
“ == ” 作为比较运算符,是用于比较两个值是否相等的,但是在比较基础数据类型和引用数据类型时是不一样的。
例如以下代码,两个基本类型作比较:

int a = 1;
int b = 1;
System.out.println(a == b);

我们可以看到返回结构为true,说明 a 和 b的值是相同的
在这里插入图片描述
那如果比较两个引用数据类型呢?

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);

我们可以看到,s1 和 s2的值明明都是abc,但比较出来结果确是false,为什么呢?
我们这里new了两个String对象,两个对象存储的地址是不同的,就算是值相同比较出来的结果也一定是false,因为 “==”在比较引用数据类型时比较的是引用(地址)是否相同
在这里插入图片描述
综上所述:
“ == ” 在比较基本数据类型比较的是值是否相同,而在比较引用数据类型的时候则是比较引用是否相同。

equals

equals被定义在了Object类中,Object类是所有类的父类,也就是说所有类都继承于Object,这也是为什么所有类都是可以调用或重写Object中的方法的。
我们通过Object的源码可以看到,equals方法的底层实现仍然是 “ == ”,但我们需要注意一点,equals不能比较两个基本数据类型。
在这里插入图片描述
可为什么我们去比较字符串时用equals比较的是两个值是否相等呢,我们可以从String源码中获得答案。
在这里插入图片描述
前面说到,所有类都继承于Object类,那也就是说所有的Object子类都是可以重写Object中定义的方法的。这里String就是重写了父类的equals方法从而实现了值得比较,可以看到,进入到这个方法时会先比较引用(地址)是否相同,若地址相同值一定是相同得,随后进行类型判断,若传入得参数类型是String,则继续比较,否则会返回false,若为ture进入判断中将参数转为String类型,比较长度,长度一致则会去遍历字符数组(String底层实现是字符数组,这里就不过多赘述了),若字符串中每个字符都相等则返回true.这样就实现了值得比较。

接下来我们看在Integer中得equals方法是这样的
在这里插入图片描述
若参数类型一致则调用intValue方法将参数转为int类型进行比较。

综上所述:
equals方法在Object中定义,其底层还是用得“==”去实现的,但是有些对象,例如String、Integer等等,则是重写了equals方法实现了值得比较。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值