谁能给我用这段代码讲一下在Java中为什么被重写的Object类里面的方法会被调用?分别在哪里被调用的

importjava.util.*;classStudent{privateStringid;privateStringname;publicStudent(String... import java.util.*;
class Student{

private String id;

private String name;

public Student(String id,String name){

this.id=id;

this.name=name;

}

//重写的toString()方法

public String toString(){

return id+":"+name;

}

//重写hashCode()方法

public int hashCode(){

return id.hashCode();

}

//重写equals()方法

public boolean equals(Object obj){

if(this==obj){ //判断是否是同一个对象

return true;

}

if(!(obj instanceof Student)){ //判读对象是否是Student类型

return false;

}

Student stu=(Student) obj; //将对象强制转换为Student类型

boolean b=this.id.equals(stu.id);

return b;

}
}
public class Demo6{

public static void main(String[] args){

HashSet hs=new HashSet(); //创建HashSet集合

Student st1=new Student("1","张三");

Student st2=new Student("2","李四");

Student st3=new Student("2","李四");

hs.add(st1);

hs.add(st2);

hs.add(st3);

System.out.println(hs);

}
}
希望能讲的详细一些
展开
 我来答
piz168
2015-12-10 · 超过15用户采纳过TA的回答
知道答主
回答量:43
采纳率:100%
帮助的人:22.6万
展开全部
HashSet 里面的存储是通过对象的hash值取模来的,当然会调用hash方法啦。

由于存在hash碰撞的情况,他还要判断是不是同一个对象,于是equals又被调用了
追问
你看我的理解对不对啊,首先HashSet存入对象的时候首是先比较hash值,所以调用hashCode()方法,如果hash值一样的话然后就会调用equals()方法,对吗?那toString()方法为什么会被调用,是在哪里被调用的
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-12-10
展开全部
System.out.println(hs);

会打印所有的元素,同时,默认输出,会调用对象的toString()方法 。。。。。。。。。
追问
那另外的两个为什么会被调用啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式