易截截图软件、单文件、免安装、纯绿色、仅160KB

java中hashcode()和equals()的详解

转帖自 http://www.javaeye.com/topic/257191
java中hashcode()和equals()的详解
1. 首先equals()和hashcode()这两个方法都是从object类中继承过来的。
equals()方法在object类中定义如下:
  public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们必需清楚,当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。比如在String类中如下:
  public boolean equals(Object anObject) {
if (this == anObject) {
    return true;
}
if (anObject instanceof String) {
    String anotherString = (String)anObject;
    int n = count;
    if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
    if (v1[i++] != v2[j++])
return false;
}
return true;
    }
}
return false;
}
很明显,这是进行的内容比较,而已经不再是地址的比较。依次类推Double、Integer、Math。。。。等等这些类都是重写了equals()方法的,从而进行的是内容的比较。当然了基本类型是进行值的比较,这个没有什么好说的。
我们还应该注意,Java语言对equals()的要求如下,这些要求是必须遵循的:
• 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
• 反射性:x.equals(x)必须返回是“true”。
• 类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
• 还有一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
• 任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。
以上这五点是重写equals()方法时,必须遵守的准则,如果违反会出现意想不到的结果,请大家一定要遵守。
2. 其次是hashcode()


相关文档:

JAVA SWING 组件显示

在所有组件都放到JFrame之后,先setSize(),然后再setVisible()   。
   
设置了窗口的Size,布局管理器才能为各个组件安排合适的位置,之后再把窗体显示出来setVisible(),比如你还不知道厂房的大小,这时就无法决定设备安放的位置。 ......

传智播客java学习 Spring初步

我今天学习了徐老师讲的Spring知识,我做了简单的笔记:
反向控制(IOC)

      
bean工厂:最简单的容器,提供了基础的依赖注入支持。创建各种类型的Bean.
应用上下文:建立在bean工厂基础之上,提供系统架构服务。
ClassPathXmlApplicationContext:从类路径中加载。
FileSystemXmlAp ......

传智播客java学习 教育办公系统1

今天,我们开始了佟老师的教育办公系统的旅程:我做了简单的笔记:
      
1. 搭建 SSH 环境
      
1). 加入 Struts:
             
①. 加入 jar 包:
struts-1.3.8\apps\struts-b ......

传智播客java学习 教育办公系统2

今天继续佟老师的教育办公系统的旅程:
1. 员工录入的服务器端的简单验证:
      
1). 使用 struts 的 validator 框架
      
2). 验证规则同浏览器端的 jQuery 的 validator 验证.
      
3). 以 email 字段为例, 验证 ......

传智播客java学习 3g开发Android2

今天是学习Android开发的第二天:
      
今天主要学习了文件的读取、以及对xml文件的解析:
使用文件进行数据存储:
Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
public class FileActivity extends Acti ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号