В Java массив выглядит как контейнер значений, поэтому легко ожидать, что equals сравнит элементы внутри.
Но массивы не переопределяют equals для содержимого. Обычный equals у массива работает почти как сравнение ссылок.
Например, два массива с одинаковыми числами не будут равны через equals:
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a.equals(b));Результат будет false, потому что это два разных объекта в памяти.
Для одномерных массивов нужно использовать Arrays.equals:
System.out.println(Arrays.equals(a, b));
Теперь Java сравнит элементы по порядку и вернёт true.
С массивами объектов логика такая же:
String[] left = {"java", "ready"};
String[] right = {"java", "ready"};
System.out.println(Arrays.equals(left, right));Но для вложенных массивов Arrays.equals уже недостаточно. Он сравнит внутренние массивы как объекты.
Для двумерных структур нужен deepEquals:
int[][] x = {{1, 2}, {3, 4}};
int[][] y = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepEquals(x, y));То же самое касается вывода. Обычный toString у массива покажет служебное имя, а не элементы.
Для нормального вывода используют Arrays.toString:
System.out.println(Arrays.toString(a));
Если массив вложенный, нужен deepToString:
System.out.println(Arrays.deepToString(x));
Массивы в Java стоит сравнивать и выводить через Arrays. Иначе код может выглядеть логично, но проверять совсем не то.
👉 Java Ready | #совет
