Java: возможно ли создать два объекта во время выполнения (разные JVM) с одинаковой идентичностью?
Я использую DB4o и хочу убедиться, что я получаю один уникальный объект обратно, когда я использую такой код:
public List<Object> getListOfObjects(final Object o){
List<Object> result = db.query(new Predicate<Object>(){
@Override
public boolean match (Object arg0){
if(arg0.equals(o)){
return true;
}
else{
return false;
}
});
return result;
}
Желательно, чтобы объект списка "результат" содержал не более 1 элемента. Однако разве не возможно, что Java создает объекты с одинаковыми идентификаторами в разные среды выполнения (разные JVM)? Если бы это могло произойти, то это испортило бы мою базу данных.
Конечно, должен быть ответ на вопрос, могут ли объекты Java иметь одинаковые идентификаторы в JVM.
для -Alex-
1 ответ
Если вы переписываете метод.equals() вашего объекта, то легко получить несколько экземпляров объекта, который равен. Вся цель метода equal() - сравнить два объекта на предмет равенства "семантика / контент". Он не изолирует никакую уникальность.
Теперь, если вы не переопределяете какой-либо равный метод, то идентичность объекта сравнивается. (например, используя оператор ==). Идентификация уникальна в JVM, и никогда не бывает двух объектов с одинаковой идентичностью.
Кстати /Offtopic: Если вы храните тысячи объектов в db4o и используете ваш запрос, это будет довольно медленно. Подробнее об этом здесь.