6
votes

comparer des tableaux en Java

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?

1 commentaires

char []. Equals fait une comparaison de mémoire, pas une comparaison de contenu


6 Réponses :


17
votes

Utilisez matrices de tableaux . Exemple: xxx


0 commentaires

3
votes
boolean t = Arrays.equals(nir1,nir2)

0 commentaires

1
votes

Je voulais juste signaler la raison pour laquelle cela échoue:

Les tableaux ne sont pas des objets, ce sont des types primitifs.

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 ().

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.

Comme suggéré par d'autres affiches, la voie à suivre consiste à utiliser la classe de tableaux: xxx p> et xxx

pour des matrices complexes.

aussi, pour l'égalité: xxx


2 commentaires

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.



10
votes

La raison t renvoie false est que les tableaux utilisent les méthodes disponibles sur un objet . Puisque cela utilise objet # égale () , il renvoie false car nir1 et nir2 ne sont pas le même objet.

Dans le cas de m , la même idée contient. Object # Tostring () Imprime un identifiant d'objet. Dans mon cas, lorsque je les ai imprimés et les ai vérifiées, le résultat était xxx

qui sont, bien sûr, pas les mêmes.

coolbeans est correct ; Utilisez la méthode Static TRANSAYS.QUAYS.Q /) Pour les comparer.


0 commentaires

3
votes

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);
 }


0 commentaires

1
votes

Utilisez ceci: xxx

au lieu de ceci: xxx

S'il vous plaît avoir l'air Ceci


0 commentaires