Метод equals()
наследуется от Object
, поэтому его сигнатура не должна изменяться. equals()
часто может использоваться без фактического знания конкретного класса объекта, например, при переборе коллекций объектов (особенно до обобщений Java 5). Так что тогда вы даже не увидите другой equals()
, не опустив сначала ваш объект до String
.
Это был дизайнерский выбор создателей Java, чтобы сделать идиому использования equals()
пригодной для использования одинаково для всех объектов.
Более того, ИМО
if (string1.equalsIgnoreCase(string2)) ...
более читабелен, поэтому менее подвержен ошибкам, чем
if (string1.equals(string2, true)) ...
Конечно, в ваших собственных классах вы можете добавить equals()
с другой подписью (то есть поверх стандартного equals()
, то есть).