我的主要代码中有这个代码,为什么这段代码返回true? equals()方法由NetBeans 7.3.1自动编写。
Movimento md = new Movimento(3, 1, 2014, 100, "Debito", 'D');
Movimento mc = new Movimento(3 , 1 , 2014, 100 , "Credito", 'C');
System.out.println(mc.equals(md));
这是等于代码...
public boolean equals(Movimento obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
if (this.dia != obj.dia) {
return false;
}
if (this.mes != obj.mes) {
return false;
}
if (this.ano != obj.ano) {
return false;
}
if (Double.doubleToLongBits(this.valor) != Double.doubleToLongBits(obj.valor)) {
return false;
}
if (!Objects.equals(this.descricao, obj.descricao)) {
return false;
}
if (this.tipo != obj.tipo) {
return false;
}
return true;
}
答案 0 :(得分:0)
Movimento
类equals
方法不是比较所有属性来检查其对象的相等性。
答案 1 :(得分:0)
equals
方法的结果在很大程度上取决于它的实现。
equals
的方法Object
:
public boolean equals(Object obj) {
return (this == obj);
}
这意味着equals
将返回true
,仅当两个变量包含引用时(因此引用同一个对象)。
如果它返回false
,则必须由覆盖原始方法引起。
我不知道,bug在哪里,因为我没有看到你的equals
方法,但我可以给你一个例子,如何写一个:
public class MyClass {
private int integer;
private String string;
private char character;
public MyClass(int integer, String string, char character) {
this.integer = integer;
this.string = string;
this.character = character;
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj == this)
return true;
if (!(obj instanceof MyClass))
return false;
MyClass myClass = (MyClass) obj;
if (integer == myClass.integer && string.equals(myClass.string) && character == myClass.character)
return true;
else
return false;
}
}
我希望这可以帮助你找出错误......