Сравнение массивов в Java - PullRequest
6 голосов
/ 08 апреля 2011
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());

Почему m и t ложны?Как правильно сравнивать 2 массива в Java?

Ответы [ 6 ]

17 голосов
/ 08 апреля 2011

Используйте Arrays.equals метод.Пример:

boolean b = Arrays.equals(nir1, nir2); //prints true in this case
10 голосов
/ 08 апреля 2011

Причина, по которой t возвращает ложь, заключается в том, что массивы используют методы, доступные для Object. Поскольку он использует Object#equals(), он возвращает false, потому что nir1 и nir2 не являются одним и тем же объектом.

В случае m сохраняется та же идея. Object#toString() распечатывает идентификатор объекта. В моем случае, когда я их распечатал и проверил, результат был

nir1 = [I@3e25a5
nir2 = [I@19821f

Что, конечно, не одно и то же.

CoolBeans правильно; используйте статический метод Arrays.equals() для их сравнения.

3 голосов
/ 01 февраля 2019

Используйте Arrays.equals вместо array1.equals(array2). Arrays.equals(array1, array2) проверит содержимое двух массивов, а позже проверит ссылку. array1.equals(array2) просто означает array1 == array2, что в данном случае неверно.

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);
 }
3 голосов
/ 08 апреля 2011
boolean t = Arrays.equals(nir1,nir2)
1 голос
/ 01 февраля 2019

Используйте это:

return Arrays.equals(perm1, perm2)

Вместо этого:

return perm1.equals(perm2);

Пожалуйста, посмотрите это

1 голос
/ 08 апреля 2011

Я просто хотел указать причину, по которой это не удается:

массивы не являются объектами, они являются примитивными типами.

Когда вы печатаете nir1.toString (), вы получаете java-идентификатор nir1 в текстовой форме. Так как nir1 и nir2 были выделены отдельно, они уникальны, и это приведет к различным значениям toString ().

Два массива также не равны по той же причине. Это отдельные переменные, даже если они имеют одинаковое содержимое.

Как и предлагалось другими авторами, путь можно получить, используя класс Arrays:

Arrays.toString(nir1);

и

Arrays.deepToString(nir1);

для сложных массивов.

Также за равенство:

Arrays.equals(nir1,nir2);
...