PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] array.equals-Frage


Kenny1702
2008-03-07, 16:38:12
Warum bekomme ich bei

int [][] test=new int[5][5];
int [][] test1=new int[5][5];
for(int i=0;i<5;i++)
for(int j=0;j<5;j++){
test[i][j]=0;
test1[i][j]=0;
}
System.out.println(test.equals(test1));

als Antwort "false"? Der Inhalt der beiden stimmt doch überein.

P.S.: Das sie nicht identisch sind, ist mir klar.:)

Baalzamon
2008-03-07, 17:01:44
Wenn mich nicht alles täuscht, weil die equals Methode sich auf das Objekt bezieht und nicht auf den Inhalt des Objekts. Damit ist deine Erklärung: Weil sie nicht identisch sind absolut korrekt. ;)

Wenn du prüfen willst, ob zwei Arrays denselben Inhalt haben, musst du imho schon alle Elemente miteinander vergleichen.

Monger
2008-03-07, 17:54:32
"equals" muss für jede Klasse erneut definiert werden. Was Gleichheit bedeutet, ist nunmal interpretationsfähig.

Ich hab leider zum Array nichts finden können. Aber in der API der ArrayList steht explizit: zwei ArrayLists sind gleich, wenn sie gleich groß sind, in der selben Reihenfolge sortiert sind, und jedes ihrer Elemente im gleichen Index zu einander gleich sind.

Du kannst also mal probeweise versuchen, statt einem Array eine ArrayList zu nehmen.

PH4Real
2008-03-07, 19:46:49
Dafür gibts in java.util die Klasse Arrays mit statischen equals Methoden. Du hast jedoch ein verschachteltes Arrays, also deepEquals:


int[][] test = new int[5][5];
int[][] test1 = new int[5][5];
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++) {
test[i][j] = 0;
test1[i][j] = 0;
}
System.out.println(test.equals(test1)); // -> false, da Objektidentät unterschiedlich
System.out.println(Arrays.equals(test, test1)); // -> false, da nur erste Ebene geprüft wird (und dann wieder Objektvergleich)
System.out.println(Arrays.deepEquals(test, test1)); // -> true

Gast
2008-03-10, 03:01:27
equals prüft inhalt und referenz der objekte. erst wenn beides erfüllt ist bekommst du true.

also einfach equals überschreiben und jedes elemt vergleichen...


z.b.

if (a1.length != a2.length)
return false;
for (int i=0; i<a1.length; i++)
if (a1[i] != a2[i])
return false;
return true;