2014-01-03 2 views
-4

У меня этот код в моем основном, почему этот код возвращает true? Метод equals() был автоматически написан NetBeans 7.3.1.Java, The equals() Метод

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

Внесите также метод метода equals ... –

+7

Покажите свой метод «equals», мы не волшебники. –

+0

Вы должны, вероятно, показать нам метод equals :) –

ответ

0

Результат equals Метод во многом зависит от его реализации.

Метод equals из Object:

public boolean equals(Object obj) { 
    return (this == obj); 
} 

Это означает, что equals будет возвращать true, только если эти две переменные хранит ссылки (поэтому ссылки на тот же объект).

Если он возвращает false, это должно быть вызвано переопределением исходного метода.

Я не знаю, где это ошибка, потому что я не вижу свой метод 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; 
    } 

} 

Я надеюсь, что это помогает чтобы выяснить ошибку ...

0

Movimento класс equals метод не сравнивая все атрибуты, чтобы проверить равенство своих объектов.

Смежные вопросы