Java:是否可以在具有相同标识的不同运行时(不同JVM)中创建两个对象?

时间:2013-03-23 08:37:46

标签: db4o serializable object-oriented-database

我正在使用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;
      }

List对象“result”最好不要超过1个元素。但是,Java是否可能在不同的运行时(不同的JVM)中创建具有相同身份的对象?如果发生这种情况,那么它会搞乱我的数据库。

肯定必须回答Java对象是否可以在JVM中具有相同的身份。

-Alex

1 个答案:

答案 0 :(得分:1)

如果覆盖对象的.equals()方法,那么很容易拥有一个等于的对象的多个实例。 equal()方法的全部目的是比较关于&#39;语义/内容的两个对象。平等。它不会隔离任何唯一性。

现在,如果不覆盖任何相等的方法,则比较对象标识。 (比如使用==运算符)。标识在JVM中是唯一的,并且永远不会有两个具有相同标识的对象。

Btw / Offtopic:如果你在db4o中存储了数千个对象并使用你的查询,它将会很慢。关于here的更多信息。