int [] nir1 = new int [2]; nir1[1] = 1; nir1[0] = 0; int [] nir2 = new int [2]; nir2[1] = 1; nir2[0] = 0; boolean t = nir1.equals(nir2); boolean m = nir1.toString().equals(nir2.toString()); Why are both m and t false? What is the correct way to compare 2 arrays in Java?
6 Réponses :
boolean t = Arrays.equals(nir1,nir2)
Je voulais juste signaler la raison pour laquelle cela échoue:
Les tableaux ne sont pas des objets, ce sont des types primitifs. P>
Lorsque vous imprimez NIRR1.Tostring (), vous obtenez un identifiant Java de NIR1 sous forme textuelle. Étant donné que NIRR1 et NIR2 ont été attribués séparément, ils sont uniques et cela produira différentes valeurs de tostring (). P>
Les deux tableaux ne sont pas non plus égaux pour la même raison. Ce sont des variables distinctes, même si elles ont le même contenu. P>
Comme suggéré par d'autres affiches, la voie à suivre consiste à utiliser la classe de tableaux: p> pour des matrices complexes. p> aussi, pour l'égalité: p>
Les tableaux sont des objets; Voir la JLS ici. Java.sun.com/docs/books/jls/ second_edition / html / arrais.doc.h tml
C'est tellement étrange. S'ils sont des objets, alors pourquoi je ne peux pas les étendre ou changer leur comportement? Si cela serait possible, l'OP pourrait remplacer la totring (), les égaux () et le hashcode () et sa méthode fonctionneraient.
La raison Dans le cas de qui sont, bien sûr, pas les mêmes. P> coolbeans est correct ; Utilisez la méthode Static t code> renvoie false est que les tableaux utilisent les méthodes disponibles sur un objet
code>. Puisque cela utilise
objet # égale () code>, il renvoie false car
nir1 code> et
nir2 code> ne sont pas le même objet.
m code>, la même idée contient.
Object # Tostring () Code> Imprime un identifiant d'objet. Dans mon cas, lorsque je les ai imprimés et les ai vérifiées, le résultat était p>
TRANSAYS.QUAYS.Q /) CODE> Pour les comparer. P> P>
Utiliser Arrays.equals code> au lieu de
array1.equals (array2) code>.
Arrays.equales (Array1, Array2) Code> Vérifiez le contenu des deux tableaux et le plus ultérieur vérifiera la référence.
array1.equals (array2) code> signifie simplement
array1 == array2 code> qui n'est pas vrai dans ce cas.
public static boolean perm (String s, String t){
if (s.length() != t.length()) {
return false;
}
char[] perm1 = s.toCharArray();
Arrays.sort(perm1);
char[] perm2 = t.toCharArray();
Arrays.sort(perm2);
return Arrays.equals(perm1, perm2);
}
S'il vous plaît avoir l'air Ceci P> P>
char []. Equals code> fait une comparaison de mémoire, pas une comparaison de contenu