Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:比较具有相同属性但不指向内存中相同点的相同对象_Java_Android_Object_Compare - Fatal编程技术网

Java:比较具有相同属性但不指向内存中相同点的相同对象

Java:比较具有相同属性但不指向内存中相同点的相同对象,java,android,object,compare,Java,Android,Object,Compare,我有一个自定义适配器,如下所示: private List<User> items = new ArrayList<>(); private Context context; public UserSpinnerAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull List<User> objects) { super(context, resource,

我有一个自定义适配器,如下所示:

private List<User> items = new ArrayList<>();
private Context context;
public UserSpinnerAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull
        List<User> objects) {
    super(context, resource, objects);

    this.items = objects;
    this.context = context;
}
private List items=new ArrayList();
私人语境;
public UserSpinnerAdapter(@NonNull上下文,@LayoutRes int-resource,@NonNull
列出对象){
超级(上下文、资源、对象);
此项=对象;
this.context=上下文;
}
当我想找到从web api获取的对象用户的位置时,
public int getPosition(@Nullable User item)
的结果总是-1。我想这是因为我传递给适配器的项不仅与适配器用户列表中的内容相同,尽管所有内容都相同,但指向另一个内存点


那么,我如何比较两个具有相同属性但实际分离的对象呢?

您应该为
用户
对象实现一个
等于
/
哈希代码
,您应该为
用户
对象实现一个
等于
哈希代码
,您应该覆盖它
等于比较对象的方法。您可以在类中按
Alt+Insert
,然后选择
equals()和hashCode()
,轻松完成此操作。例如,如果您的类有另一个自定义类型的字段

public class User {
     ...
     private Location location;
     ...
}

您还必须为Location实现
equals
/
hashCode
,您应该为比较的对象重写
equals
/
hashCode
方法。您可以在类中按
Alt+Insert
,然后选择
equals()和hashCode()
,轻松完成此操作。例如,如果您的类有另一个自定义类型的字段

public class User {
     ...
     private Location location;
     ...
}

您还必须为Location实现
equals
/
hashCode
,谢谢,但是它不需要覆盖hashCode,只需要equals()@Kenji就可以了;但是当重写equals时,您应该始终重写hashCode。谢谢,但是它在不重写hashCode的情况下工作,并且只使用equals()@Kenji,它会;但是当重写equals时,您应该总是重写hashCode。它也很有用。你说的位置是什么意思?@Kenji,这只是个例子。我的意思是,如果您的类
User
具有自定义字段类型(例如
Location
),并且您没有将
equals
/
hashCode
实现为
Location
,那么您将得到
User
的非相等对象,即使通过引用比较
Location
,所有字段都是相等的。这也很有用。你说的位置是什么意思?@Kenji,这只是个例子。我的意思是,如果您的类
User
具有自定义字段类型(例如
Location
),并且您没有将
equals
/
hashCode
实现为
Location
,那么您将得到
User
的非相等对象,即使通过引用比较
Location
,所有字段都是相等的。