[Java] Inhalt von Arrays vergleichen...

topfklao

Christoph N.
ID: 118468
L
20 April 2006
885
17
Hallo,

ich habe schon wieder ein Problem :(

Ich habe folgende zwei Klassen:

PHP:
class Test2 {
    int testint;
    int testint2;
    
    Test2(int testint, int testint2){
        this.testint = testint;
        this.testint2 = testint;
    }
    
}

--------------------

PHP:
class Test3 {
    Test2 [] testarray2;
    
    Test3(int nr){
        testarray2 = new Test2[nr];  
    }
    
    void testing(){
        testarray2[0] = new Test2(1,2);
        testarray2[1] = new Test2(1,2);
        
        boolean ausgabe = false;
        if(testarray2[0].equals(testarray2[1])){
            ausgabe= true;
        }
        System.out.print("derzeitig.. testarray2 gleichheit : " + ausgabe);
    }
}

Meines Erachtens sind die Inhalte der beiden Arrays "testarray2[0]" und "testarray2[1]" gleich. Doch wie teste ich das? Mit "==" erziele ich ebenso wie mit "equals" kein richtiges Ergebnis!
Danke für eure Hilfe!
 
Hätte die entsprechende JavaKlasse importiert.
Doch jetzt kommt es wenn ich es folgendermaßen aufrufe:
if(Arrays.deepEquals(testarray2[0], testarray2[1])){
ausgabe= true;
}
zu einer Fehlermeldung, dass diese Funktion hier nicht angewendet werden kann!:(
 
Hätte die entsprechende JavaKlasse importiert.
Doch jetzt kommt es wenn ich es folgendermaßen aufrufe:

zu einer Fehlermeldung, dass diese Funktion hier nicht angewendet werden kann!:(

Mal ins Blaue geraten (kenne mich mit Java nicht wirklich aus): Hast du eine Vergleichsmethode für deine Test-Klasse definiert? Könnte mir vorstellen, dass man das muss ;)
 
Och benni, schieß doch net mit deinen Halbwahrheiten rum, aber hey du wrats aufm richtigen Weg :LOL:

Erklärung:
bei komplexen variablen führt ein == dazu, dass der speicherbereich vergleichen wird, da dies 2 versch. arrays sind hilft das nicht. equals war schon komplett richtig, aber der fehler liegt woanders^^
Du speicherst in das Objekt eigene Objekte diese erben von der Super-Klasse Object, nun muss man natürlich wissen, was die equals-Methode des Arrays macht, auch wenn es logisch ist: es vergleicht jeden Eintrag der Arrays.
So und wie wird dies angestellt? es wird die equals methode von Test2 genutzt um 2 Test2-Objekte zu vergleichen.
Nur was passiert bei Objekten die keine eigene equals implementieren? Jup, sie erben von ihrem Vater (von mir aus auch ihrer Mutter) die Methode, und in der Ursprungsimplementation von Object wird die toString()-Methode zum Vergleich genutzt, diese toString-Methode, gibt, sofern nicht anders defeniert einen eindeutigen "hash" für ein Objekt zurück, von daher werden 2 TestObjekte nie gleich sein, obwohl sie vllt die gleichen Attribute haben.

Lösung:
defenier eine eigene equals()- oder toString()-Methode