我正在比较两个具有相同属性和值的对象,但返回的是假
我将两个if条件分开,以检查哪个条件不对。 我已经调试了算法,以便可以检查对象的属性值是否有问题。
https://gyazo.com/73427a2a20558901019fc885745ca1d2
public boolean existsBag(Bag bag) {
for (int i = 0; i < this.insertedBags.length; i++) {
if (this.insertedBags[i] != null ) {
if(this.insertedBags[i].equals(bag)){
return true;
}
}
}
return false;
}
更新
通过覆盖Bag类中的equals方法解决了问题,谢谢大家!
答案 0 :(得分:1)
如果要比较对象,则需要覆盖重写equals()方法,否则它将返回false。
这是一个示例如何覆盖equals方法。
考虑一个Employee类,该类具有两个字段:年龄和姓名。
公共类员工{
String name;
int age;
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof Employee))
return false;
Employee employee = (Employee) obj;
return employee.getAge() == this.getAge()
&& employee.getName() == this.getName();
}
}
答案 1 :(得分:1)
如评论中所述,您可能没有重写equals
方法。
只是暗示它可能是什么样子
public class Bag {
@Override
public boolean equals(final Object other) {
if (this == other)
return true;
if ( ! (other instance of Bag))
return false;
// now compare your inner fields. E.g:
final Bag bagOther = (Bag) other;
if (! this.brandName.equals(bagOther.brandName)) // brandName is java.lang.String
return false;
if (! this.length == bagOther.length) // length is int
return false;
// ...
return true;
}
}
如果不被覆盖,默认情况下,equals
使用其基类Object
的版本来比较实例的内存位置。
还要注意,除了覆盖equals
外,您还应该覆盖方法hashCode
。
例如:this article,说明了如何以及为什么
答案 2 :(得分:0)
在Bag类中只需覆盖方法equals()
和hashCode()
。
第一个用于比较对象值,第二个用于在JVM内部创建对象哈希。这样,您将获得正确的比较。
答案 3 :(得分:0)
默认情况下,所有类都继承Java中的Object
类。这样,Object类以及所有其他类都具有一个public boolean equals(Object o)
方法,该方法仅返回this == o
。
[对OpenJDK来说这是正确的,对于Oracle JDK也可能相同。]
要指定自定义相等逻辑,必须使用自己的比较逻辑覆盖此public boolean equals(Object)
方法。其他答案已经提供了相关代码。有关更多讨论,请参见this Stackoverflow线程。
答案 4 :(得分:0)
默认情况下等于比较两个对象的引用,
因此,如果要比较对象,则需要覆盖equals()
方法,否则它将返回false
。
答案 5 :(得分:-1)
根据api:
对于任何非空参考值x和y,如果和 仅当x和y指向同一对象(x == y的值为true)时。