我正在使用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
答案 0 :(得分:1)
如果覆盖对象的.equals()方法,那么很容易拥有一个等于的对象的多个实例。 equal()方法的全部目的是比较关于&#39;语义/内容的两个对象。平等。它不会隔离任何唯一性。
现在,如果不覆盖任何相等的方法,则比较对象标识。 (比如使用==运算符)。标识在JVM中是唯一的,并且永远不会有两个具有相同标识的对象。
Btw / Offtopic:如果你在db4o中存储了数千个对象并使用你的查询,它将会很慢。关于here的更多信息。