站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题equals方法到底是否需要覆盖

equals方法到底是否需要覆盖

摘要: equals方法到底是否需要覆盖


看一些书上说面说因为equals方法属于所有类的父类Object,而这个equals方法总是返回false,所以一定要被覆盖才能正确使用,但是我好像觉得不需要阿


一般不用的,但如果在一个程序中需要实现一个对象的两个实例是否相等的判断而且这个判断标准不是java 的标准(即,只有两个实例都指向同一个对象的时候才认为是相等)判定方式而是当两个实例的一个或者多个字段值相等的时候即可视为两个对象相等,在这个时候就需要自己来写这个方法以满足这种需要了。
public class Student
{
private int studentId;
private String name;
private boolean gender;

public boolean equals(int id)
{
if(id==this.studentId)
return true;
else
return false;
}
public boolean equals(int id,String name)
{
//.........//省略了name是否为null的判断
if(this.equals(id)&&this.name.equals(name))
return true;
else
return false;
}

public static void main(String args[])
{
Student s1 = new Student();
s1.setStudentId(10001);
s1.setName("tony");
Student s2 = new Student();
s2.setName("tony");
s2.setStudentId(10001);
Student s3 = s1;
System.out.println(s1.equals(s2));//java标准的equals
System.out.println(s1.equals(s3));//java标准的equals
System.out.println(s1.equals(s2.getStudentId()));
System.out.println(s2.equals(s3.getStudentId(),s3.getName()));
}
/**
* @return the gender
*/
public boolean isGender()
{
return gender;
}
/**
* @param gender the gender to set
*/
public void setGender(boolean gender)
{
this.gender = gender;
}
/**
* @return the name
*/
public String getName()
{
return name;
}
/**
* @param name the name to set
*/
public void setName(String name)
{
this.name = name;
}
/**
* @return the studentId
*/
public int getStudentId()
{
return studentId;
}
/**
* @param studentId the studentId to set
*/
public void setStudentId(int studentId)
{
this.studentId = studentId;
}
}


输出结果是:
false
true
true
true

这下应该很清楚了吧!


我懂了,要判断自定义类的对象是否相等就要覆盖,是吧


不应该向上面那么说,应该说当equals的判断条件为自定义true和false时就需要覆盖


↑返回目录
前一篇: classpath=D:/java
后一篇: 如何让图片显示在JButton上