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

时间:2017-04-10 09:01:24

标签: 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, objects);

    this.items = objects;
    this.context = context;
}

当我想找到来自web api的对象User的位置时,public int getPosition(@Nullable User item)的结果总是 -1 。我认为这是传递给适配器的项目的beacaus与内部的适配器用户列表不同,尽管每个东西都相同但指向另一个内存点。

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

2 个答案:

答案 0 :(得分:3)

您应该为#include <iostream> struct Stack { static const int capacity = 10000; void push(float x) { data[sp++] = x; } float pop() { return data[--sp]; } float data[capacity]; int sp = 0; }; Stack &operator<<(Stack &s, float x) { s.push(x); return s; } Stack &operator>>(Stack &s, float &x) { x = s.pop(); return s; } int main() { Stack stack; stack << 4.0 << 5.0 << 6.0; float x, y, z; stack >> x >> y >> z; //here pop 3 elements to x,y,z std::cout << x << " " << y << " " << z << std::endl; } 对象实施equals / hashCode

答案 1 :(得分:1)

您应该覆盖您比较的对象的equals / hashCode方法。您可以在班级中按Alt+Insert轻松完成,然后选择equals() and hashCode()。如果您的班级有另一个自定义类型的字段,例如

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

您还必须为位置

实施equals / hashCode