Java,equals()方法

时间:2014-01-03 15:13:24

标签: java equals

我的主要代码中有这个代码,为什么这段代码返回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;
}

2 个答案:

答案 0 :(得分:0)

Movimentoequals方法不是比较所有属性来检查其对象的相等性。

答案 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;
    }

}

我希望这可以帮助你找出错误......