I'm doing a homework assignment to pass a series of tests, I implemented my own equals and clone function, and can't figure out why the cloned object isn't equal to the original.
I've tried casting the Object to Student in the boolean expression of the if statement, but that hasn't done anything.
Testfile
Name n1 = new Name("John","Rockefeller");
Student s1 = new Student(n1, "123456");
Student s3 = s1.clone();
if ( s1.equals ( s3 ) )
System.out.println ( "\t\tSuccess - Students s1 and s3 are the same." );
class Student implements Cloneable
private Name fullName;
private String id;
@Override
public Student clone(){
try {
Student clone = (Student) super.clone();
clone.fullName = (Name) fullName.clone();
return clone;
} catch (CloneNotSupportedException e) {
System.out.println("Error: " + e);
return null;
}
}
public boolean equals ( Object obj ) {
if (this == (Student) obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Student calc = (Student) obj;
return Objects.equals(this.fullName, calc.fullName) && Objects.equals(this.id, calc.id);
}
Expected: The test passes, however after watching the variables in the debugging tracker I have no idea why it's not passing. The values are equal.
Your clone
method does not copy id
. Your equals
method expects the id
s to be equal.