Citat:
Ursprungligen postat av dMoberg
har du overloadat ==? (jag kan inte java)
annars ser det ju ut som du bara jämför om det är exakt samma objekt. alltså samma adress i minnet.
sen av det markerade förstår jag ingenting. förklara bättre, eller posta mer av din kod
Ville bara tillägga att Java inte stödjer operator överlagring.
Citat:
Ursprungligen postat av agneos
EDIT: jag har löst det på detta sättet men jag vill lösa det utan att lägga till getpers() metoden går det?
Kod:
public boolean equals(Object other){
//Student m=(Student)other;
if(other!=null){
return other.equals(this.getpers());
}
else{System.out.print("erro");}
return false;
}
Nu vet jag inte riktigt vad getpers metoden gör, men antagligen returnerar den inte ett objekt av typen "Student" och därmed kommer alltid other.equals(this.getpers()); returnera false.
När man överlagrar en metod (equals i Object-klassen i det här fallet) så måste sin egen implementation uppfylla metodens API, se:
http://docs.oracle.com/javase/7/docs...lang.Object%29 för att undvika underligt beteende.
I andra ord borde din equals metod se ut följande sätt:
Kod:
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true; //Om this och obj pekar på samma objekt, returnera true
}
//Kollar om obj är av typen "Student"
if (!(obj instanceof Student)) {
return false;
}
//Vi vet att obj är av typen "Student" och kan då typomvandla utan risk för ClassCastException
Student s = (Student)obj;
//Undersök nu om personnumret är samma
return this.persNummer == s.persNummer;
}
Värt att tillägga är att man även borde överlagra hashCode metoden när man överlagrar equals metoden.