2012-01-01 2 views
-2

Могу ли я понять разницу между == и object.equal(Object obj) следующим образом? :"==" vs "equal (Object obj)"

Это object.equal(Object obj) возвращает true если значения двух объектов одинаковы. В то время как == возвращает true, если оба типа и значение двух объектов одинаково.

+0

Обратите внимание, что '==' никогда не может изменить значение, но 'equals()' can. –

ответ

5

== возвращает true, если ссылки в точности совпадают.

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

Реализация по умолчанию записывается в виде

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

так что вы можете видеть, что делает то же самое.

+0

Я только спрашиваю о реализации по умолчанию equals (Object obj) –

+1

Я бы прочитал исходный код, его не очень долго и сразу ответил бы на ваш вопрос. ;) –

+0

Я вижу, спасибо! –

0

object.equals(Object obj) возвращает true, когда объекты идентичны в соответствии с атрибутами объекта в зависимости от типа объекта и если этот метод был реализован.

== возвращает true, когда экземпляр объекта тот же.

+0

Можете ли вы объяснить, что означает «идентичный»? Тот же тип класса и его значение? –

+0

Это зависит от того, класс, который вы называете 'equals', фактически реализует этот метод. В 'String', который будет сравнивать все символы один за другим и если они будут одинаковыми, верните true. – Dimme

+0

вы можете рассмотреть, как метод equals для сравнения строк и == используется для проверки идентификации объекта (расположения объекта) !! – Arung

2

Поведение по умолчанию java.lang.Object.equals и == - это возврат true, если обе ссылки a и b указывают на один и тот же объект; false в противном случае.

Если вы хотите сравнить значения, вы должны переопределить равные. Вот что сделали String и некоторые другие типы. Вы не получите его бесплатно; вам необходимо переопределить метод от java.lang.Object.

Лучше всего прочитать «Эффективная Java» Джошуа Блоха chapter 3, чтобы увидеть, как это сделать должным образом.

+0

Тогда какая разница между этими двумя? –

+0

+1 для ссылки на главу Блоха. –

+0

'==' всегда означает обращение к одному и тому же объекту. То, что означает 'equals', зависит от типа объекта, метод' equals', который вы вызываете. –

0

Реализация Object.equals является:

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

Это возвращает true только тогда, когда obj точно такой же объект, как this. Как сказал Питер Лоури в своем ответе, определение equals для любого другого класса полностью зависит от того, как оно кодируется. Нет даже требования, чтобы эти два объекта были одним и тем же классом или даже иерархически связанными классами.

Обратите внимание, что определение equals без определения hashcode обычно считается плохой практикой. Существует требование, чтобы два объекта, которые являются equal, должны возвращать один и тот же хэш-код.

+0

приятно, спасибо. –

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