equals不重写的时候和 == 一样 都是比较对象在堆内存的地址
那什么时候不需要重写 equals就是比较对象本身呢~~
还有要重写 怎么重写啊 望大神给个例子 而且网上看的例子里面都会调用自身equals
而且str1是哪里跑出来得 什么意思都~~~~
public boolean equals(Object obj) {
if(this == obj)
return false;
if(obj == null)
return false;
if(getClass() != obj.getClass() )
return false;
MyClass other = (MyClass)obj;
if(str1 == null) {
if(obj.str1 != null) {
return false;
}
}else if (!str1.equals(other.str1) )
return false;
}
if(var1 != other.var1)
return false;
return true;
}
推荐阅读这篇文章。http://www.cnblogs.com/silence-hust/p/4558701.html
equal用于比较两个对象的值是否相同【不是比地址】,判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同 ;
==在比较两个对象时是比较地址,==比较两个变量时比较的是变量的值是否相等。
所以比较两个变量用==,比较两个对象用equals。
在什么时候需要重写equals的问题
判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象。这样我们往往需要重写equals()方法。
我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法。