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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨志 高级黑马   /  2012-7-26 09:37  /  1324 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨志 于 2012-7-29 21:36 编辑

   很久没有来论坛了。
   今天进来活动活动。一上来就是看到==和equals方法的区别的问题的帖子。这问题真的很麻烦么?
   后面的同学的回答可谓各家之言,什么样的答案都有。
   其实我想说的是,只要你们真的去看下jdk的源码就会发现很多问题。
   其实 == 和equals方法是一样的。i没有任何区别(在没有进行重写的前提下)。
   每每许多人喜欢去看所谓的百度,或者别人的言论。认为那就是对的。
   其实不然,百度上面的东西很多都是 copy的。
   许多你认识是绝对是正确的东西,在你动动手之后就发现那其实并不是那样的。
   String类中之所以会有equls()方法和 ==的区别,关键就在于String 类中进行了重写。
   在你自己进行javaBean比较的时候,如果没有重写,那equals和== 的结果都是一样的。
  下面给一些JDK的源码:
   这就是在jdk中的Object类中的equsl方法,其实调用的就是== 方法。
  1. public boolean equals(Object obj) {
  2. return (this == obj);
  3. }
复制代码
下面看看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 = count;
  8. if (n == anotherString.count) {
  9. char v1[] = value;
  10. char v2[] = anotherString.value;
  11. int i = offset;
  12. int j = anotherString.offset;
  13. while (n-- != 0) {
  14. if (v1[i++] != v2[j++])
  15. return false;
  16. }
  17. return true;
  18. }
  19. }
  20. return false;
  21. }
复制代码
其实认真去看就会发现String 类就是用字符数组实现的。
  那么这里也就是用字符数组去循环比较它的值。
  希望大家能多看看JDK 的文档。你就会发现很多事情其实真的不像百度上面那样说的。
  曾经别人也是这样告诫我的。希望你们也能多去关注JDK 的源码,而不是只会去百度。
  JDK的源码真的是一座宝库!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马