谁能给我用这段代码讲一下在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);
}
}
希望能讲的详细一些 展开
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);
}
}
希望能讲的详细一些 展开
展开全部
HashSet 里面的存储是通过对象的hash值取模来的,当然会调用hash方法啦。
由于存在hash碰撞的情况,他还要判断是不是同一个对象,于是equals又被调用了
由于存在hash碰撞的情况,他还要判断是不是同一个对象,于是equals又被调用了
追问
你看我的理解对不对啊,首先HashSet存入对象的时候首是先比较hash值,所以调用hashCode()方法,如果hash值一样的话然后就会调用equals()方法,对吗?那toString()方法为什么会被调用,是在哪里被调用的
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-12-10
展开全部
System.out.println(hs);
会打印所有的元素,同时,默认输出,会调用对象的toString()方法 。。。。。。。。。
会打印所有的元素,同时,默认输出,会调用对象的toString()方法 。。。。。。。。。
追问
那另外的两个为什么会被调用啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询