java的equals问题 望大神解惑

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不是比较地址。

在什么时候需要重写equals的问题
判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象。这样我们往往需要重写equals()方法。
我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法。