2017-02-06 31 views
2

Сегодня я попытался сравнить два массива с использованием equals(), это явно не сработало, я начал diggin 'и т. Д. И т. Д., И после некоторых исследований я не могу понять: в какой момент времени создается класс для массива? Потому что я знаю, что int [] a приводит к созданию класса массива для целых чисел. Кто его создает? Почему было невозможно переопределить Object.equals(), чтобы он не сравнивал два объекта и вместо этого сравнивал элементы массивов? Был бы очень благодарен, если бы кто-нибудь мог объяснить или предоставить ссылку, которая поможет понять это.В какой момент массив массивов создается в java?

+0

Вы должны использовать ['Arrays.compare()'] (https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#equals (int [],% 20int [])) сделать это –

+0

«Почему было невозможно переопределить Object.equals(), чтобы он не сравнивал два объекта и вместо этого сравнивал элементы массивов?» Это было невозможно, это просто не было сделано. Теперь мы придерживаемся этой семантики, чтобы не сломать код, опираясь на них. –

+0

@sharonbn Я знаю это сейчас, это был не вопрос –

ответ

1

Array не переопределяет equals() класса Объект.
Поэтому он не будет использовать метод equals() объектов, которые он удерживает, когда equals() вызывается в массиве.

Если вы хотите сравнить два массива целого числа, вы можете использовать метод Arrays.equals().
Если это вас не устраивает, создайте свой собственный метод для сравнения двух целых чисел.

Но переопределение equals() из массива невозможно, так как класс является окончательным и, кроме того, кажется довольно странным подходом.

+0

Я не хочу переопределять класс массива, я хочу знать, почему разработчики java (Oracle или кто бы то ни было) не переопределяли 'Object.equals()' –

+0

, потому что у него были бы слишком побочные эффекты, поскольку из него вытекают все классы. – davidxxx

+2

«все классы вытекают из этого» Нет, они этого не делают. –