Как загрузчик классов java идентифицирует повторяющиеся классы?

Допустим, у меня есть java-проект, в который я добавил 2 разных jar-файла в свой путь к классам. Загрузчик классов Java обнаружил несколько повторяющихся классов в 2 банках, и тогда будет загружен только один из них.

Как загрузчик классов решает, что 2 класса в пути к классам одинаковы? Просто по имени класса или packageName.className Или он сравнивает каждый байтовый код этих классов?


person Number945    schedule 05.12.2019    source источник
comment
Не существует имени класса без имени пакета с точки зрения загрузчика классов. Он всегда загружает класс с именем пакета, поэтому загружается не String, а загружается java.lang.String   -  person Jens    schedule 05.12.2019
comment
@Jens да, но если 2 разных класса имеют одинаковое полное имя, но разный код, будет ли загрузчик классов рассматривать их как дубликаты?   -  person Number945    schedule 05.12.2019
comment
Путь к классам работает точно так же, как путь выполнения в любой операционной системе: ищите записи пути по порядку, и побеждает первый с совпадением.   -  person VGR    schedule 05.12.2019
comment
@BreakingBenjamin класс будет упоминаться только по этому имени, без анализа кода   -  person Jens    schedule 05.12.2019
comment
@Jens, тогда почему нижеприведенный ответ занижен?   -  person Number945    schedule 06.12.2019


Ответы (1)


Он принимает решение только по полному имени (пакет + имя класса) и загружает (в общем случае - зависит от загрузчика классов) первый класс, найденный в пути к классам. Нет сравнения байт-кода.

person dgebert    schedule 05.12.2019