关于java,求大神讲解

wy901024 2012-10-04 10:12:10
在什么情况下,要重写equals和hashCode方法啊!重写之前为什么不能直接用呢?求举例子
...全文
263 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wb826337736 2012-10-06
  • 打赏
  • 举报
回复
equals用于比较两个字符串的地址是否相同,
wangchen19931113 2012-10-05
  • 打赏
  • 举报
回复
其实equals比较的是字符串的相等,然而能比较的前提是要相同类型,指针是内存地址,而字符串是内容
夏借冬凉 2012-10-04
  • 打赏
  • 举报
回复
equals为true,hashCode相同,就是==
夏借冬凉 2012-10-04
  • 打赏
  • 举报
回复
如果是字符串,equals是比较字符串是否一样;如果是对象,equals是比较内在地址,也就是说是不是同一个对象。重写equals一般是对对象来说,如果两个对象不是同一个对象,但是对象某个值或某些值一样,你就认为他们是相同的话,可以重写equals来满足需求。例如,方块5与黑桃5是不同的对象,但它们的值一样就认为相等的话,可以重写equals,

重写hashCode就是对==作用的,思路和上面讲的一样。

希望把你误导了。
zhaoming262350 2012-10-04
  • 打赏
  • 举报
回复
你可以看一下这个代码:重写了equals() ,hashCode()
import java.util.HashSet;

public class SetTest3
{
public static void main(String[] args)
{
HashSet set = new HashSet();

Student s1 = new Student("zhangsan");
Student s2 = new Student("zhangsan");

set.add(s1);
set.add(s2);

System.out.println(set);

}
}

class Student
{
String name;

public Student(String name)
{
this.name = name;
}

public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}

public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (name == null)
{
if (other.name != null)
return false;
}
else if (!name.equals(other.name))
return false;
return true;
}

}

a363722188 2012-10-04
  • 打赏
  • 举报
回复
我在这里发表一下我的理解:首先你的弄清楚是String的equals方法还是Object对象的(非String对象) ,如果是String那么equal是比较的是字符串的内容(例子 String s="my";String s2="my";那么s.equals(s2)为true 如果是通过new的方式则需要重写String s=new String("my")), 而Object对象的equals默认比较的是引用地址,意思就是默认实现==一样的功能,不是真正的比较对象的内容,所以这个时候就要自己重写equals方法啦。 这是我个人理解,不对的请大家指正。
liangtu 2012-10-04
  • 打赏
  • 举报
回复
比如equals,默认的equals是"==",可以比较数值,但是涉及到对象,肯定返回false。如果我们有一大堆对象需要排序,这个相等的依据是和业务相关的,那么就需要重写equals方法才能进行判断。
LogicTeamLeader 2012-10-04
  • 打赏
  • 举报
回复
直说equals,如果你定义的类的成员变量有引用类型,就需要重写equals方法。
这个跟c++中的指针作为成员变量时要重写拷贝构造函数一样。

随便找本书看,都会仔细的说这个。

[Quote=引用楼主 的回复:]
在什么情况下,要重写equals和hashCode方法啊!重写之前为什么不能直接用呢?求举例子
[/Quote]

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧