A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pizhihui 中级黑马   /  2015-6-9 21:44  /  775 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Object类的equals方法时和==的效果是一样的,在比较引用数据类型的时候,是比较的地址,但是String类的时候,却是比较的是内容,这是为什么了?这的跟踪源代码看看,
String的equals方法重写了父类Object的equals方法,让比较的是否是内容相同,而不是地址值是否相同

  1.       public boolean equals(Object anObject) {
  2.         if (this == anObject) {//如果是同一个对象,返回true
  3.             return true;
  4.         }
  5.         if (anObject instanceof String) {//判断是否是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.     }
复制代码
从String类的源代码可以看出,String类重写了Object类中的equals方法,代码中比较的就是String中存储的内容是否相同,所以在调用String类的equals方法的时候,比较的是内容是否相同。


3 个回复

倒序浏览
好,收藏了
回复 使用道具 举报
sunny~ 来自手机 中级黑马 2015-6-9 22:10:12
藤椅
嗯,就是这样的来自: iPhone客户端
回复 使用道具 举报
学习了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马