Ответ
Вопрос требует уточнения, так как в Java Core нет встроенной концепции «создания объекта по идентификатору». Ответ зависит от контекста:
1. Оператор new: При каждом использовании new создаётся новый, уникальный объект в куче, даже если значения его полей идентичны другому объекту.
MyClass obj1 = new MyClass(5);
MyClass obj2 = new MyClass(5);
System.out.println(obj1 == obj2); // false — это разные объекты в памяти.
2. Кеширование/пулы объектов: Некоторые API или паттерны (например, Flyweight) могут возвращать один и тот же экземпляр для одинаковых идентификаторов. Это поведение не является стандартным для языка, а реализуется явно.
- Пример:
Integer.valueOf(int i)кеширует объекты для значений от -128 до 127.Integer a = Integer.valueOf(127); Integer b = Integer.valueOf(127); System.out.println(a == b); // true — это один и тот же кешированный объект. - Паттерн Flyweight: Специальная фабрика может хранить созданные объекты в
Mapи возвращать существующий экземпляр для повторяющегося ключа.
Вывод: По умолчанию (new) — объекты всегда разные. Возврат одного экземпляра — результат явной реализации кеширования в конкретном классе или фабрике.