ale*_*pro 103 java equality equals object hashcode
说我有自己的课
public class MyObj { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
它有一些属性和方法.它不实现equals,不实现hashCode.
一旦我们调用equals和hashCode,默认实现是什么?来自Object类?他们是什么?默认等于如何工作?默认的hashCode如何工作以及返回什么?==只会检查它们是否引用同一个对象,所以这很容易,但是equals()和hashCode()方法呢?
Eti*_*tel 91
是的,默认实现是Object(一般来说;如果从一个重新定义了equals和/或hashCode的类继承,那么你将使用该实现).
从文档:
类Object的equals方法实现了对象上最具辨别力的等价关系; 也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true).
尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数.(这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术.)
Bra*_*ace 46
来自Object其中一个JVM实现:
public boolean equals(Object object) {
return this == object;
}
public int hashCode() {
return VMMemoryManager.getIdentityHashCode(this);
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,它只是比较相关对象的内存地址.