哈哈哈123457
2017-03-03 03:00
采纳率: 100%
浏览 883
已采纳

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;

}

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 夕阳雨晴 2017-03-03 03:29
    已采纳
    打赏 评论
  • 懒_得起名字 2017-03-03 03:28

    equal用于比较两个对象的值是否相同【不是比地址】,判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同 ;
    ==在比较两个对象时是比较地址,==比较两个变量时比较的是变量的值是否相等。
    所以比较两个变量用==,比较两个对象用equals。

    题主注意equals不是比较地址。

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

    打赏 评论

相关推荐 更多相似问题