Я посмотрел one of your previous questions, и кажется, что поле color
является Color
. Я предполагаю, что вы не изменили тип этого поля.
Это класс и, следовательно, ссылочный тип, что означает, что вам нужно использовать equals()
или аналогичный метод для сравнения цветов (я раньше не использовал этот класс, поэтому я не могу точно сказать, какой метод использования).
if (/* ... && */ this.color.equals(other.color)) {
Как и в комментариях, используя ==
сравнивать ссылочные типы действительно сравнения адресов памяти в Java. Он возвращает только true
, если они оба относятся к одному и тому же объекту в памяти.
EDIT:akf points out, что вам нужно использовать базовый класс Object
для параметра, в противном случае вы не перекрывая Object.equals()
, но на самом деле перегрузки его, т.е. обеспечивая другой способ вызова одноименных метода , Если вы случайно случайно передадите объект совершенно другого класса, может возникнуть непредвиденное поведение (хотя, опять же, если они имеют разные классы, он в любом случае вернет false
).
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Ghost))
return false;
// Cast Object to Ghost so the comparison below will work
Ghost other = (Ghost) obj;
return this.x == other.x
&& this.y == other.y
&& this.direction == other.direction
&& this.color.equals(other.color);
}
@fprime: Вам нужен только один оператор return, а не 'if'. ;-) –
распечатать результат отдельных фраз (например, 'this.x == other.x') перед выражением if. Посмотрите, какой из них не работает. –
Рассматриваются ли какие-либо из переменных типов объектов, в отличие от примитивных типов? –