2013-03-23 39 views
0

我使用了db4o,並要確保我得到一個唯一的對象回來時,我用這樣的代碼:Java:是否可以在具有相同標識的不同運行時(不同JVM)期間創建兩個對象?

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中身份是唯一的,並且從未有兩個具有相同身份的對象。

Btw/Offtopic:如果將數千個對象存儲在db4o中並使用您的查詢,但是我的問題是詢問不同對象的身份(==)是否可以在兩個不同的JVM之間是相同的... ...更多關於這個here

+0

是的,謝謝你,我喜歡你所說的。我假設現在這是真的。 –

相關問題