с 2007 года JavaOne:
Вторая головоломка, под названием «Больше радостей наборов», позволяет пользователю создавать ключи HashMap, состоящие из нескольких объектов URL. Опять же, большинство зрителей не смогли угадать правильный ответ.
Важная вещь, которую слушатели узнали здесь, это то, что метод equals () объекта URL, по сути, не работает . В этом случае два объекта URL равны, если они разрешают один и тот же IP-адрес и порт, а не только если они имеют одинаковые строки. Однако Блох и Пью указывают на еще более серьезную ахиллесову пяту: поведение равенства различается в зависимости от того, подключены ли вы к сети, где виртуальные адреса могут разрешаться на одном и том же хосте, или если вы не в сети, где разрешение является операцией блокировки. Итак, что касается извлеченных уроков, они рекомендуют:
Не использовать URL; используйте URI вместо . URI не пытается сравнивать адреса или порты. Кроме того, не используйте URL как элемент Set или ключ карты.
Для разработчиков API метод equals () не должен зависеть от среды. Например, в этом случае равенство не должно меняться, если компьютер подключен к Интернету, а не автономно.
Из URI равно документации:
Чтобы два иерархических URI считались равными, их пути должны быть равны , а их запросы должны быть либо неопределенными, либо равными.
В вашем случае два пути различны. один "/" другой "".
Согласно URI RFC §6.2.3:
Реализации может использовать правила схемы, при дальнейшей обработке
стоимость, чтобы уменьшить вероятность ложных негативов. Например,
потому что схема "http" использует компонент полномочий, имеет
порт по умолчанию "80", и определяет пустой путь, чтобы быть эквивалентным
«/», следующие четыре URI эквивалентны:
http://example.com
http://example.com/
http://example.com:/
http://example.com:80/
Похоже, что эта реализация не использует правила, специфичные для схемы.
Ресурсы: