Java(Equals方法)
上面的代码有什么问题??理想情况下,它应该打印“它们相等”,但我得到的输出是“它们不相等”为了使这项工作Java(Equals方法),java,Java,上面的代码有什么问题??理想情况下,它应该打印“它们相等”,但我得到的输出是“它们不相等”为了使这项工作if(emp2.equals(emp3))您需要覆盖Employee类中equals方法的默认行为 class Employee{ private String name; private int rollno; public Employee(String name,int rollno) { this.name=name; this.rollno=rollno;
if(emp2.equals(emp3))
您需要覆盖Employee类中equals方法的默认行为
class Employee{
private String name;
private int rollno;
public Employee(String name,int rollno)
{
this.name=name;
this.rollno=rollno;
}
}
public class CT2{
public static void main(String[]args){
Employee emp1 = new Employee("Raghu",35);
Employee emp2 = new Employee("Raghu",35);
Employee emp3 = new Employee("Raghu",35);
if(emp2.equals(emp3))
System.out.println("They are equal");
else
System.out.println("They are not equal");
}
}
@Override
public boolean equals(Object o){
if ( !(o instanceof(Employee)){
return false;
}
Employee t = (Employee)o;
return this.name.equals(t.name) && this.rollno == t.rollno;
}
窗体对象类
请注意,每当重写此方法时,通常需要重写hashCode()
方法,以便维护hashCode()
方法的一般约定,该约定规定相等的对象必须具有相等的哈希代码
您需要在类中实现
equals
方法
类对象的equals方法实现了对象上最有区别的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象(x==y的值为true)时,此方法才返回true
添加以下方法将对您有效
@Override
public boolean equals(Object other){
/// your implementation of equals ..
}
您需要重写Employee类中的equals方法 如果您不编写自己的
equals()
,Java将使用默认的比较对象标识
创建两个对象时,此操作将失败
作为类的创建者,只有您才能知道这些类的对象何时应该被视为相等,即使它们是单独的实例
你可能需要像这样的东西
@Override
public boolean equals(Object o) {
// If the object is compared with itself then return true
if (o == this) {
return true;
}
/* Check if o is an instance of Complex or not
"null instanceof [type]" also returns false */
if (!(o instanceof Employee)) {
return false;
}
// typecast o to Complex so that we can compare data members
Employee c = (Employee) o;
// Compare the data members and return accordingly
return (rollno == c.rollno && Objects.equals(name, c.name))
}
<>请记住,每当你执行<代码>等于时,你也应该考虑执行<代码> hash码< />代码> ,因为你自己不重写ToShin方法,它实际上使用了Objest.< /P>的版本。 这实际上是:
public boolean equals(Object o) {
if(o instanceof Employee) {
Employee other = (Employee)o;
return this.rollno == other.rollno && this.name.equals(other.name);
}
return false;
}
在您的示例中,您的对象确实具有相同的值,但引用不相同,因此失败
加:
为了完全对齐:还要重写hashCode方法
请务必理解,我上面写的equals方法不可能抛出NullPointerException,因为您可以将null作为名称传递给构造函数。将其放在employee类中
class Employee{
private String name;
private int rollno;
public Employee(String name,int rollno)
{
this.name=name;
this.rollno=rollno;
}
}
public class CT2{
public static void main(String[]args){
Employee emp1 = new Employee("Raghu",35);
Employee emp2 = new Employee("Raghu",35);
Employee emp3 = new Employee("Raghu",35);
if(emp2.equals(emp3))
System.out.println("They are equal");
else
System.out.println("They are not equal");
}
}
@Override
public boolean equals(Object o){
if ( !(o instanceof(Employee)){
return false;
}
Employee t = (Employee)o;
return this.name.equals(t.name) && this.rollno == t.rollno;
}
当前Employee object
emp2
使用对象类的equals()
方法来比较两个对象引用。下面的代码片段显示了对象类equals()
方法
public boolean equals(Object object){
if(object instanceof Employee){
Employee emp2= (Employee) object;
if(this.name.equals(emp2.name) && this.rollno == emp2.rollno))
return true;
return false;
}
return false;
}
您需要重写此
equals()
方法以使两个不同的对象相等。根据java文档,类对象的equals方法在对象上实现了最有区别的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象(x==y的值为true)时,此方法才返回true
对象引用的等于()。
这就是为什么它是错误的,因为它们是不同的对象。
equals()用于使用对象的内部状态进行比较
要解决问题,需要在Employee类中重写equals方法。必须在中重写hashcode和equalsemployee@jackk不是那个的复制品。OP没有比较字符串,OP没有使用
==
,而且OP的代码无论如何也不会工作。@AndyTurner:事实上,他使用的是==比较,只是在他的代码中没有那么清楚。@Stultuske抱歉,在哪里?@AndyTurner:他使用来自对象的equals方法,这是==比较。当更改equals以使对象相等时,如果不是相等,则必须更改hashCode以使这些对象具有相同的哈希代码。objects.equals(name,c.name)
好多了。我想他现在只是想理解equals。你写的正是我想为OP.写的:)这不是对equals方法的重写。编辑后非常糟糕的设计:为什么不->返回this.name.equals(emp2.name)&&this.rollno==emp2.rollno?也许再多了解一点。这似乎更多的是一个评论,而不是一个答案。
/* Object.equals() */
public boolean equals(Object obj) {
return (this == obj);