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
。