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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 jiyixuan 于 2012-6-14 00:41 编辑

"关于‘==’是只负责基本数据类型比较,和引用对象地址比较,而equals则是比较两个对象间的内容是否一样"。(这个说法比较片面)



每个类都是使用Object作为超类的,所有对象,包括数组也实现这个类的方法。

对于Object类中的方法如下:
  1. public boolean equals(Object obj) {  
  2.    return (this == obj);  
  3. }  
复制代码
表明说对于一个普通类,没有覆盖equals方法时。该类的比较“==”与equals操作的结果是相同的。

而为什么在字符串中比较,我们强调使用equals来比较内容,使用“==”来比较是否为同一对象。

是因为String类中的equals方法已经覆盖如下:

  1.         1. public boolean equals(Object anObject) {  
  2.         2. if (this == anObject) {  
  3.         3.     return true;  
  4.         4. }  
  5.         5. if (anObject instanceof String) {  
  6.         6.     String anotherString = (String)anObject;  
  7.         7.     int n = count;  
  8.         8.     if (n == anotherString.count) {  
  9.         9.     char v1[] = value;  
  10.         10.     char v2[] = anotherString.value;  
  11.         11.     int i = offset;  
  12.         12.     int j = anotherString.offset;  
  13.         13.     while (n-- != 0) {  
  14.         14.         if (v1[i++] != v2[j++])  
  15.         15.         return false;  
  16.         16.     }  
  17.         17.     return true;  
  18.         18.     }  
  19.         19. }  
  20.         20. return false;  
  21.         21.    }  
复制代码
根据字符串中的每一个字符做出比较(字符比较相当于基础数据类型比较)。

而对于hashCode()是否要覆盖,主要是在集合类中使用,例如set中为了保持唯一性,判断一个对象是否相等的时候,除了通过equals的值外,还需要通过判断hashCode是否相等即:对象相等,必然hashCode都应该相等hashCode相等,对象未必相等。






2 个回复

倒序浏览
  1. public boolean equals(Object obj) {

  2. return (this == obj);

  3. }
复制代码
回复 使用道具 举报
==是判断的地址。equals()是判断的地址指向的值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马