Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo Community,
wie kann ich jetzt die einzelnen Attributen einzeln vergleichen?
das habe ich bis jetzt programmiert:
Java:
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Person p1 = new Person("Mueller", "Hans", 22);
Person p2 = new Person("Mueller", "Hans", 22);
p1.istGleich(p2);
p1.drucke();
p2.drucke();
System.out.println(p1 == p2);
//p1==p2 ist false. Sie haben zwar den gleichen Inhalt haben aber Sie befinden
//sich nicht in der selben Referenz!!!
}
class Objekte {
}
}
class Person {
String nachname;
String vorname;
int alter;
Person(String vorname, String nachname, int alter) {
this.vorname = vorname;
this.nachname = nachname;
this.alter = alter;
}
public void drucke() {
System.out.println("Nachname: " + nachname + " Vorname" + vorname + " Alter " + alter);
}
public static boolean istGleich(Person personObjekt) { //Uebung4_4
boolean stimmtnicht=false;
if(?????){ <<----
}
return stimmtnicht;
}
}
Kommt auf den Datentyp des Attributes an. Primitve Typen kann man mit == vergleichen, Objekte mit equals(). Das ist für alle Klassen der API implementiert. Für eigene Klassen musst du die equals()-Methode überschreiben, und sinnig implementieren. Also nur, wenn du eben nicht einzelne Attribute vergleichen willst, sondern einfach wissen willst ob 2 Personen gleich sind. zB:
Java:
class Person {
//...
public boolean equals(Object o){
if(!(o instanceof Person)){
return false;
}
return ((Person)o).vorname.equals(this.vorname) && (Person)o).nachname.equals(this.nachname) && (Person)o).alter == this.alter);
}
Du musst doch festlegen, was die Gleichheit zweier Personen ausmacht. Genügt der gleiche Nachname, genügt Gleichheit in Vor- und Nachname ... oder oder oder.
Mit
Code:
equals()
(sofern noch nicht überschrieben) kannst du herausfinden, ob es die gleichen Objekte sind, wie Metacoder bereits gesagt hat. In dem Fall sind sie auf jeden Fall gleich.
Wenn du aber inhaltlich vergleichen willst, ob zwei verschiedene(!) Objekte die gleiche Person beschreiben, musst du ihre Attribute vergleichen. Etwa derart:
(sofern noch nicht überschrieben) kannst du herausfinden, ob es die gleichen Objekte sind, wie Metacoder bereits gesagt hat. In dem Fall sind sie auf jeden Fall gleich.[/code]
Ist equals nicht überschrieben, sind sie auf jeden Fall ungleich!
Es handelt sich um zwei unterschiedliche Instanzen der Klasse Person (personInstanz1 und personInstanz2).
Wird equals überschrieben und darin die Felder verglichen, die die logische Identität der Instanz ausmachen (z.B. Vorname, Nachname),
dann kann equals sinnvoll angewendet werden!
Und nicht vergessen hashCode auch zu überschreiben (z.B. wenn die Klasse in eine Collection einfügen werden soll)!
ja aber bei mir zeigt fehler an. Instanzen können nicht gefunden werden also in diesem fall p1 und p2 wie soll das gehen? Außedem hab ich doch kein set wie soll ich dann get verlangen?
ja aber bei mir zeigt fehler an. Instanzen können nicht gefunden werden also in diesem fall p1 und p2 wie soll das gehen? Außedem hab ich doch kein set wie soll ich dann get verlangen?
Und darin musst du nun den vergleich beider Personen implementieren. Und jetzt frag nicht, welche beiden Personen oder wie du an ihre Attribute kommst...
Die Lösung befindet sich sogar schon in diesem Thread.