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 и используете ваш запрос, это будет довольно медленно. Подробнее об этом здесь.

Другие вопросы по тегам