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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张榆 中级黑马   /  2012-9-25 12:56  /  2150 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在张孝祥老师的高新技术反射里面,里面有一个题将所有String类型中的值中所有的'b'改为'a',说到str.getClass()和String.class是同一个字节码文件,最好用==,而不用.equals(),为什么最好用==?好在什么地方呢?

14 个回复

倒序浏览
本帖最后由 夏诗瑶 于 2012-9-25 13:16 编辑

判断是不是同一个对象。 而不是判断内容是不是相同。其实可以理解为 == 的判断 包含了equals。
回复 使用道具 举报
夏诗瑶 发表于 2012-9-25 13:00
我是这么理解的: 判断是不是同一个对象。 而不是判断内容是不是相同。其实可以理解为 == 的判断 包含了equ ...

Object类中的equals方法不就是用来判断对象相同么
回复 使用道具 举报
本帖最后由 宁振庄 于 2012-9-25 13:04 编辑

==是指引用地址指向的同一个对象,equals一般用于两个对象的值比较,而非引用比较

str.getClass()和String.class是同一个字节码文件,那意思就是指向同一个对象,所以用“==”吧。
回复 使用道具 举报
宁振庄 发表于 2012-9-25 13:03
==是指引用地址指向的同一个对象,equals一般用于两个对象的值比较,而非引用比较

str.getClass()和String ...

C:\Users\Elm\Desktop
回复 使用道具 举报
张榆 发表于 2012-9-25 13:02
Object类中的equals方法不就是用来判断对象相同么

Object类的equals()方法确实就是==的意思,但是其他类就不一定是这样了,很多类的equals()方法的实现都是:先用==判断是不是同一个对象,是的话就返回true,否则的话继续判断两个对象里面的属性是否一样,一样的话返回true,否则再返回false。既然都能是比较是不是同一份字节码,用==来比较,程序的开销要比用equals()来比较小很多,那当然用==比较好了
回复 使用道具 举报
张榆 中级黑马 2012-9-25 13:14:08
7#
张榆 发表于 2012-9-25 13:11

这上面就是说equals判断对象的啊

[OYDDOP8DA)T~$IB6VXB0JB.jpg (9.81 KB, 下载次数: 34)

[OYDDOP8DA)T~$IB6VXB0JB.jpg
回复 使用道具 举报
夏天 初级黑马 2012-9-25 13:14:54
8#
张榆 发表于 2012-9-25 13:02
Object类中的equals方法不就是用来判断对象相同么


Object中 还有一句话,其他方法最好重写此方法。 就是因为Object中的equals方法没有区分性
回复 使用道具 举报
王海宇 黑马帝 2012-9-25 13:21:38
9#
张榆 发表于 2012-9-25 13:14
这上面就是说equals判断对象的啊

Object类中equals()方法
  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.     }
复制代码
你自己对比一下看看有什么不同,然后总结一下
回复 使用道具 举报
王海宇 发表于 2012-9-25 13:21
Object类中equals()方法String类中的equals()方法你自己对比一下看看有什么不同,然后总结一下 ...

那里用的也是Object中的equals方法,没有用到String类的equals方法
回复 使用道具 举报
张榆 发表于 2012-9-25 13:39
那里用的也是Object中的equals方法,没有用到String类的equals方法

既然都能是比较是不是同一份字节码,用==来比较,程序的开销要比用equals()来比较小很多,那当然用==比较好了。一个是用==号比较,一个是调用方法,而且里面实际上还是用==比较,你觉得用哪个比较好呢??
回复 使用道具 举报
王海宇 发表于 2012-9-25 13:44
既然都能是比较是不是同一份字节码,用==来比较,程序的开销要比用equals()来比较小很多,那当然用==比 ...

认为这就是正解~~~~
回复 使用道具 举报
夏诗瑶 发表于 2012-9-25 13:49
认为这就是正解~~~~

这个解释得很到位,理解了
回复 使用道具 举报
王海宇 发表于 2012-9-25 13:44
既然都能是比较是不是同一份字节码,用==来比较,程序的开销要比用equals()来比较小很多,那当然用==比 ...

这个解释得很到位,理解了
回复 使用道具 举报
王海宇 发表于 2012-9-25 13:44
既然都能是比较是不是同一份字节码,用==来比较,程序的开销要比用equals()来比较小很多,那当然用==比 ...

这个解释得很到位,理解了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马