Object 的俩个方法:equals() hashcode()
2013-11-15 19:36
666 查看
hashCode
public int hashCode()
Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by
java.util.Hashtable.
The general contract of
hashCodeis:
Whenever it is invoked on the same object more than once during an execution of a Java application, thehashCode method must consistently return the same integer, provided no information used inequals comparisons on the object is modified.
This integer need not remain consistent from one execution of an application to another execution of the same application.
If two objects are equal according to the equals(Object) method, then calling the
hashCodemethod on each of the two objects must produce the same integer result.
It is not required that if two objects are unequal according to the
equals(java.lang.Object)method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects
may improve the performance of hashtables.
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation
technique is not required by the JavaTM programming language.)
Returns:a hash code value for this object.See Also:
equals(java.lang.Object),
Hashtable
equals
public boolean equals(Object obj)
Indicates whether some other object is "equal to" this one.
The
equalsmethod implements an equivalence relation on non-null object references:
It is reflexive: for any non-null reference value
x,
x.equals(x)should return
true.
It is symmetric: for any non-null reference values
xand
y,
x.equals(y)should return
trueif and only if
y.equals(x)returns
true.
It is transitive: for any non-null reference values
x,
y, and
z, if
x.equals(y)returns
trueand
y.equals(z)returns
true, then
x.equals(z)should return
true.
It is consistent: for any non-null reference values
xand
y, multiple invocations of
x.equals(y) consistently return
trueor consistently return
false, provided no information used in
equalscomparisons on the objects is modified.
For any non-null reference value
x,
x.equals(null)should return
false.
The equals method for class
Objectimplements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values
xand
y, this method returns
trueif and only if
xand
yrefer to the same object (
x == yhas the value
true).
Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for thehashCode method, which states that equal objects must have equal hash codes.
Parameters:
obj- the reference object with which to compare. Returns:
trueif this object is the same as the obj argument;
falseotherwise.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
String对象的equals()代码:
public boolean equals(Object obj)
{
if(this == obj) //情况1:二个对象的引用相同,即指向的内存地址相同 。成立
return true;
if(obj instanceof String) //情况2:obj也是String的一个对象,他们的值完全一致。成立
{
String s = (String)obj;
int i = count;
if(i == s.count)
{
char ac[] = value;
char ac1[] = s.value;
int j = offset;
int k = s.offset;
while(i-- != 0)
if(ac[j++] != ac1[k++])
return false;
return true;
}
}
return false;
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
老祖Object的equals方法:
public boolean equals(Object obj) //就是引用相同
{
return this == obj;
}
分析总结:若obj1.equals(obj2)==true ---> obj1.hascode()==obj2.hashcode(); ①
//地址是同一地址
若obj1.equals(obj2)==false -/--> obj1.hascode()!=obj2.hashcode(); ②//推不出
编程者知:对equals()不相等的俩个对象,产生不同的integer值(hashcode)是可以提升hashtables的性能的。
如果不重写equals,那么比较的将是对象的引用是否指向同一块内存地址,重写之后目的是为了比较两个对象的value值是否相等。特别指出利用equals比较八大包装对象
(如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值,在比较其它自定义对象时都是比较的引用地址
hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。
这样如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重写hashcode,那么我们再new一个新的对象,
当原对象.equals(新对象)等于true时,两者的hashcode却是不一样的,由此将产生了理解的不一致,如在存储散列集合时(如Set类),将会存储了两个值一样的对象,
导致混淆,因此,就也需要重写hashcode()
相关文章推荐
- 关于Object类的equals方法和hashCode方法
- 重写object中的hashcode和equals方法
- Object常用方法介绍及注意事项equals(),hashCode(),getClass(),toString()
- Object 类之 hashCode 和 equals 方法
- 如何重写Object的hashCode和equals方法
- 《Java核心技术》第10版读书笔记之Chap5(3)——Object类及其equals、hashCode与toString方法
- java.lang.Object的equals()和hashCode()方法小结
- 重写Java Object对象的hashCode和equals方法实现集合元素按内容判重
- Java记录 -57- Object的equals、hashcode和toString方法
- 复写Object超类的equals,hashCode,toString方法
- [Java] Object方法浅析(一): equals与hashCode
- 为什么SpringAOP使用JDK动态代理时好像没有代理Object.[equals()、hashCode()、toString()]这三个方法
- 重写对象的equals(Object)方法,同时重写Hashcode()方法
- JAVA源码分析之---Object类(二)---hashCode,equals,clone方法的使用
- 重写Object.equals()方法和Object.hashCode()方法
- Object 开发中常用的重写方法总结toString,equals,hashCode,compareTo
- Java中的hashCode()方法与equals(Object)方法
- Object 开发中常用的重写方法总结toString,equals,hashCode,compareTo
- object对象重写equals方法时为什么需要重写hashCode方法
- object对象重写equals方法时为什么需要重写hashCode方法