javaSE源码研究:equals()方法简单研究

Object.equals:

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

        方法概要:可继承,可重写,完全开放(public)的返回boolean的方法

        原理:当前对象与传入对象的引用地址的比较,更极端的说法是只有自己与自己比较的时候才会相等!

Objects.equals:

public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));//比较两个对象,类型不确定,如果a和b引用同一个地址,返回true,如果a不为空时,b满足a本身重写的equals方法,这返回true
    }

String.equals:

public boolean equals(Object anObject) {
        if (this == anObject) {//如果是相同的对象,则肯定相同
            return true;
        }
        if (anObject instanceof String) {//当传入的对象是String类型的才会继续执行
            String anotherString = (String)anObject;//将传入对象转化为String
            int n = value.length;//获取传入对象的长度
            if (n == anotherString.value.length) {//相等的前提是两个字符串的长度相等
                char v1[] = value;//当前字符串的char数组(字符串的值)
                char v2[] = anotherString.value;//传入字符串的char数组(字符串的值)
                int i = 0;//用于记录数组下标
                while (n-- != 0) {//比较次数等于字符串长度
                    if (v1[i] != v2[i])//如果相同位置上的字符不相等,判断两个字符串不相等,返回false
                        return false;
                    i++;//如果相等,进行下一个位置的比较
                }
                return true;//代表每一个位置都相等
            }
        }
        return false;不是同一个对象,也不是String类型
    }

         方法概要:因为String是final类,所以方法无法改变但是开放(public),返回boolean

         原理:在比较引用地址的基础上增加了字符串内容的比较,只服务于String类,也只比较String类!

HashMap.equals:

public final boolean equals(Object o) {
      if (o == this)
           return true;//判断两个对象是否是同一个对象,和Object的一样
      if (o instanceof Map.Entry) {//对比的对象必须是Map
          Map.Entry<?,?> e = (Map.Entry<?,?>)o;//强转
          if (Objects.equals(key, e.getKey()) &&
              Objects.equals(value, e.getValue()))
              return true;//必须同时满足键和值相等,才能判定这个hashMap是相等的
          }
      return false;
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值