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有好多东东
前几天看了看 没怎么通明白
今天早晨3点45看了会 国际米兰 客场挑战 切尔西的比赛
哎呀 很爽
魔力鸟重返斯坦福桥
我就想啊 这JAVA不是有个回访的函数吗
呵呵 忘了叫啥了
安切洛蒂在米兰时期经常被动的挨到魔力鸟的国际米兰的打压
这何尝不是JAVA里面的那个继承吗
还有 今天国米在锋线上使 ......
Debug透视图
http://www.cnblogs.com/Jamesliang/archive/2010/01/09/1643188.html
当点击Debug按钮时,Eclipse会提示你进入 Debug透视图。可以在右上方Expressions窗口点击鼠标右键在弹出菜单中选择 Add Watch Expression 或者点击如下图所示按钮则会出现,添加表达式窗口。你可以输入你 ......
这里所说到的Java中的排序并不是指插入排序、希尔排序、归并排序等具体的排序算法。而是指执行这些排序算法时,比较两个对象“大小”的比较操作。我们很容易理解整型的 i>j 这样的比较方式,但当我们对多个对象进行排序时,如何比较两个对象的“大小”呢?这样的比较 stu1 > stu2 显然是不可 ......
今天,我们开始了佟老师的教育办公系统的旅程:我做了简单的笔记:
1. 搭建 SSH 环境
1). 加入 Struts:
①. 加入 jar 包:
struts-1.3.8\apps\struts-b ......
今天是学习
Android
的第三天,今天主要学了
Android
内置的
SQLite
数据库,学习了增删改查。
SharedPreferences
进行数据存储
:
Android
平台给我们提供了一个
SharedPreferences
类,它是一个轻量级的存储类,特别适 ......