情况1,地址相同

 /*public boolean equals(Object anObject){//是name1调用的equals方法。所以anObject对象为name2。此处有上转型

  if(this==anObject){因为是name1调用的equals方法,所以this为name1。因为anObject存的是上转型对象name2.name1和name2的值都为“Tom”所以地址相同。

return true;//地址相同了。内容一定相同所以会返回true.结束equals方法。

}

 

情况2地址不同

/*public boolean equals(Object anObject) {//首先name1调用的equals方法,name2传入anObject}

     if (this == anObject)  //this 为name1  anObject为name2.定义name2时新创了一个String对象。所以name1 name2地址不相同。所以false

    return true;}

   if(anObject instanceof String)  //因为anObject中包含的是name2是String类型创建的上转型对象。所以是true.

    String anotherString = (String)anObject;//下转型

    int n = value.length;//value为常量

   if (n == anotherString.value.length) //anotherString.value.length代表name2中有多少个字符。长度相等则为true

  char v1[] = value;表示name1字符组成的数组

  char v2[] = anotherString.value;表示name2字符组成的数组

    int i = 0;

    while (n-- != 0) {//当字符串长度大于1时
                          if (v1[i] != v2[i])//从0开始,逐个比较各字符只要有一个不相等,两个字符串就不相同,返回false

                                return false;//返回false并结束方法
                          i++;
                         }
                         return true;//每个字符都相同,返回true
                         }
                   }
                   return false;

Posted on 2021-05-11 21:48  lezai0514  阅读(181)  评论(0)    收藏  举报