Почему equals у массивов в Java не сравнивает содержимое?
Почему equals у массивов в Java не сравнивает содержимое? В 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 Библиотека | Мы в Телеграм