万物皆对象。Object类是类层级结构的根, 是所有类的超类。所有的对象都要实现其中的方法。
Object类有十几个方法,除了toString(), equals(), finalize()三个方法外,其他的方法全是native方法,即在C代码中实现的的方法。
Object中的所有方法,除了registerNatives()方法是私有的,其他的方法都可以被子类重写。
1、toString()方法:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
默认返回类名@地址
2、equals()方法:
public boolean equals(Object obj) { return (this == obj); }
object的equals,JLS(java language specification)中是这么描述的
The method
equals
defines a notion of object equality, which is based on value,
not reference, comparison.
也就是比较的是值,而不是比较的引用。 这也验证了java的方法传参实际上是值传参,而不是引用传参。
子类重新equals方法的时候,需要注意,要同时重写hashCode方法,因为在java规范的公共契约里面规定了,相同的对象一定是具有相同的hashcode。不过额外提一句,就是具有相同hashcode的对象未必是同一个对象。
3、finalize()方法:
是垃圾回收时,jvm触发的对象销毁前执行的方法。子类可以重写这个方法来指定对象销毁时要执行的内容,但是一般不建议改写。如果改写不好,会影响垃圾回收效率,可能会导致无法回收或者回收缓慢而造成内存溢出的情况。