C'est vraiment pas évident.
Tout d'abord, l' ==
opérateur, il suffit de comparer deux pointeurs. Parce qu' a
et b
sont des objets distincts situés à différentes adresses de la mémoire, a == b
sera de retour false
(Hey, Java les puristes, je sais que l' ==
comparer réellement les identités de l'objet. Je suis juste essayer d'être didactique).
Maintenant, nous allons jeter un oeil à l' equals()
de la mise en œuvre de tableaux:
boolean[] c = new boolean[] { false, true, false };
boolean[] d = new boolean[] { false, true, false };
if (c.equals(d)) {
System.out.println("Equals");
} else {
System.out.println("Not equals");
}
Ce serait imprimer Not equals
car aucune occurrence de array en fait met en œuvre l' equals()
méthode. Donc, quand nous appelons <somearray>.equals(<otherarray>)
nous sommes fait appel de la Object.equals()
de la méthode, il suffit de comparer deux pointeurs.
Cela dit, notez que votre code est en train de faire ceci:
boolean[] a0 = new boolean[] { false, true };
boolean[] a1 = new boolean[] { true, false };
boolean[] b0 = new boolean[] { false, true };
boolean[] b1 = new boolean[] { true, false };
boolean[][] a = new boolean[][] { a0, a1 };
boolean[][] b = new boolean[][] { b0, b1 };
if (Arrays.equals(a, b) || a == b)
System.out.println("Equal.");
else
System.out.println("Different.");
L' Arrays.equals(a, b)
finira par appel d' a0.equals(b0)
qui sera de retour false
. Pour cette raison, Arrays.equals(a, b)
sera de retour false
ainsi.
Ainsi, votre code sera imprimée Different.
et nous concluons que Java égalité peut être difficile parfois.