Скажем, у меня есть собственный класс
public class MyObj { /* ... */ }
У него есть некоторые атрибуты и методы. Он НЕ реализует равенства, НЕ реализует hashCode.
Каковы реализации по умолчанию после вызова equals и hashCode? Из класса объекта? А какие они? Как будет работать равенство по умолчанию? Как будет работать хэш-код по умолчанию и что вернет? == просто проверит, ссылаются ли они на один и тот же объект, так что это просто, но как насчет методов equals () и hashCode ()?
v6u23 ea
:public native int hashCode();
Существуют реализации по умолчанию
equals()
иhashCode()
в Object. Если вы не предоставите свою собственную реализацию, они будут использоваться. Ибоequals()
это означает==
сравнение: объекты будут равны, только если они являются одним и тем же объектом. ИбоhashCode()
у Javadoc есть хорошее объяснение.Для получения дополнительной информации см. Эффективная Java, Глава 3 (pdf), пункт 8.
источник
Да, из
Object
класса, поскольку ваш класс неявно расширяет Object.equals
просто возвращаетсяthis == obj
.hashCode
реализация родная. Угадайте - возвращает указатель на объект.источник
Если вы не предоставите свою собственную реализацию, будет использоваться реализация, производная от Object. Это нормально, если вы не планируете помещать экземпляры класса, например, в HashSet (любую коллекцию, которая фактически использует hashCode ()) или что-то, что необходимо для проверки равенства объектов (например, метод HashSet contains ()). В противном случае он будет работать неправильно, если вы об этом просите.
Довольно легко предоставить собственную реализацию этих методов благодаря HashCodeBuilder и EqualsBuilder от Apache Commons Lang .
источник
Foo
иBar
являются ссылками на два разных экземпляра изменяемого типа, и существует метод (напримерSomeMutatingMethod
), которыйFoo.SomeMutatingMethod()
не влияет такBar
же, как онFoo
, это различие должно быть достаточным, чтобы рассматривать объекты как неравные.IBM developerworks говорит:
Однако, чтобы быть уверенным в точных деталях реализации версии Java конкретного поставщика, вероятно, лучше всего посмотреть в качестве источника (если он доступен)
источник