zoukankan      html  css  js  c++  java
  • AJPFX对equals()方法和==异同的比较

    equals()方法是Object类的方法,所有的类都集成了此方法,还有部分类重写了这个方法,我们看一下Object类中关于该方法的的源码:

    1.     public boolean equals(Object obj) {
    2.         return (this == obj);
    3.     }

    可以知道,凡事从Object中继承的equals()方法底层使用的都是==,也就是两者比较的都是地址值。
    我们再来说一下String,这个类复写了equals()方法,源码如下:

    1.     public boolean equals(Object anObject) {
    2.         if (this == anObject) {
    3.             return true;
    4.         }
    5.         if (anObject instanceof String) {
    6.             String anotherString = (String)anObject;
    7.             int n = value.length;
    8.             if (n == anotherString.value.length) {
    9.                 char v1[] = value;
    10.                 char v2[] = anotherString.value;
    11.                 int i = 0;
    12.                 while (n-- != 0) {
    13.                     if (v1[i] != v2[i])
    14.                         return false;
    15.                     i++;
    16.                 }
    17.                 return true;
    18.             }
    19.         }
    20.         return false;
    21.     }

    该方法中,首先用==比较,如果两者地址值相同,就返回true,如果地址值不相同,再判断字符串内容是否相同,如果相同,返回值也是true,我们可以做一个实验:

    1. class equalsTest{
    2.         public static void main(String[] args){
    3.                 String a = "abc";
    4.                 String b = "abc";
    5.                 String c = new String("abc");
    6.                 sop(a==b);         //true
    7.                 sop(a.equals(b));  //true
    8.                 sop(a==c);         //false
    9.                 sop(a.equals(c));  //true
    10.         }
    11.         
    12.         public static void sop(Object o){
    13.                 System.out.println(o);
    14.         }
    15. }

    这个实验中,变量a和b底层默认启动的享元设计模式,指向的都是“abc”这个字符串对象,所以地址值相同,而语句new String("abc")底层创建的是两个对象,所以c的地址值和a,b不同,用==判断的结果为false,但是c指向的字符串内容与a是相同的,所以用equals()判断的结果为ture。

  • 相关阅读:
    android 近百个源码项目【转】
    503 Service Temporarily Unavailable
    linux 复制文件夹内所有文件到另一个文件夹
    国甲魔方(1)
    大雁展翅,轮回,国甲,国丙,速龙,傲龙,御龙这些魔方有什么区别
    77教师一定要看的15部电影【附下载地址】
    教师一定要看的15部电影
    孩子
    为什么我的 app:actionViewClass="android.widget.SearchView"和app:showAsAction="ifRoom|collapseActionView"才有
    大数据征信 是伪命题?还是金融行业的救世主?
  • 原文地址:https://www.cnblogs.com/AJPFX/p/10841904.html
Copyright © 2011-2022 走看看