欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

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

来源: javaer 分享于  点击 744 次 点评:234

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


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;
}




相关文章

    暂无相关文章

用户点评