Java 等于对象和数组中对象的方法

Java 等于对象和数组中对象的方法,java,object,compare,Java,Object,Compare,我只是想在客户列表中找到一个对象的位置,尽管当我使用equals()方法时,它总是返回false 我现在明白了,您必须创建自己的equals方法来覆盖自动方法,但我不明白在客户数组中比较客户时如何创建一个方法 以下是我的实例变量: private Customer[] data; private int size; private final static int INITIAL_SIZE = 20; 以下是我查找对象位置的方法: public int findCustomerLocation

我只是想在客户列表中找到一个对象的位置,尽管当我使用
equals()
方法时,它总是返回false

我现在明白了,您必须创建自己的
equals
方法来覆盖自动方法,但我不明白在
客户
数组中比较
客户
时如何创建一个方法

以下是我的实例变量:

private Customer[] data;
private int size;
private final static int INITIAL_SIZE = 20;
以下是我查找对象位置的方法:

public int findCustomerLocation(String name)
{
int spot = -1;
Customer cus = new Customer(name);
  for(int i = 0; i < size ; i++)
  {
    if((data[i].equals(cus)))
    {
      spot = i;
      System.out.println("spot is:"  + spot);
    }
    else
    {
      System.out.println("spot not found");
    }
  }
 return spot;
}//findCustomerLocation
public int findCustomerLocation(字符串名称)
{
int spot=-1;
客户cus=新客户(名称);
对于(int i=0;i
(未找到返回点)


我试图重写
equals
方法,但我有点卡住了,我试图使用另一个实例,但它仍然返回false

您的
equals
方法只使用与默认
对象#equals()
相同的标识运算符(
=
)。当
Customer
对象中的某些特定信息(如ID字段)相等时,您可能希望将其视为相等的对象。如果是这样,您需要比较
equals()
中的那些字段(并且您应该始终在
hashCode()
中包含
equals()
中涉及的每个字段)

类似这样的东西可能就是你想要的:

public boolean equals(Object other) {
    if(!other instanceof Customer) {
        return false;
    }

    Customer that = (Customer) other;
    return this.name.equals(that.name);
}

equals
方法应实现指示给定对象是否“等于”当前(此)对象的逻辑。从逻辑上讲,它不应该依赖于不是类成员的字段或参数。在您的情况下,您不应该使用
等于
方法中的
数据
数组或
大小
字段。只需在
Customer
的相应字段中添加检查

例如,假设
Customer
有一个名为
name
的字段,那么下面的
equals
检查两个
Customer
是否相等,如果它们具有相同的
名称

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }

    if (obj == null) {
        return false;
    }

    if (getClass() != obj.getClass()) {
        return false;
    }

    Customer other = (Customer) obj;
    if (name == null) {
        if (other.name != null) {
            return false;
        }
    } else if (!name.equals(other.name)) {
        return false;
    }
    return true;
}

如果您使用的是像Eclipse这样的IDE,那么有一些快捷方式可以以一致的方式自动重写
equals()
hashCode()
方法。通常,两个方法都应该使用相同的类成员,这样,如果两个对象相等,那么它们的hashcode值就相同。

请注意,在实现
equals
时,必须实现
hashcode
。有一些方法可以正确编写这些方法。为了安全起见,最好让IDE生成这些方法。例如,在Eclipse中,转到Source>Generate hashCode()和equals()…

您正在比较
Customer
对象,而不是它们的名称。由于它们不是同一个对象,
equals()
将返回false。要解决此问题,请将以下代码添加到
Customer

public boolean equals(Object obj){
    if(obj instanceof Customer){
        Customer c = (Customer)obj;
        if(c.name.equals(this.name)
            return true;
    }
    return false;
}
编辑:很抱歉重复的帖子,请查看chrylis的帖子,然后插入
obj!=语句的
实例之前为null


祝你好运

显示您的
Customer
类。使用?@ElliottFrisch否,他正在尝试为数组实现
contains()
。问题是他的
equals()
方法被破坏了。我包括了我的
Customer
类,客户只是名字,所以我试图查看某个客户是否已经在列表中,即他们的名字是否相同。但我从未做过
hashCode()
。@您好,如中所述,当您重写
equals()
时,您应该始终重写
hashCode()
,否则会发生不好的事情。在只有一个字段的情况下,例如,可以使用其哈希代码:
返回name.hashCode()
。如果this.name为null,则会失败。您应该使用
java.util.Objects.equals(对象a,对象b)
他实际上想要
客户的
equals