说明:
Object是所有类的父类,任何类都默认直接或者间接继承Object,理论上由于所有的类都继承在Object类,因此省略了extends Object关键字。
该类中主要有以下方法: toString(),getClass(),equals(),clone(),finalize(), 其中toString(),getClass(),equals是其中最重要的方法。
Object类的构造
Object类只有一个空参数构造器,虽然我们一般不new Object() 对象,但是需要一个空参数构造器,作用是子类构造器使用时候默认会调用父类的无参数构造器,所以必须有一个构造器
Object 的方法详解
Object类的重要四个方法
(1) equals方法
源码如下:
a. equals 方法可以比较的数据类型
Object 类的equals 方法只能判断引用类型,基本数据类型也没有equals方法,当然 equals方法可以判断任何引用类型,编译不会报错,从源码可以看出Object 的equals判断的是地址是否相等
往往子类需要重写equals 方法,判断内容是否相等,比如String, ArrayList Integer …
b. equals方法& == 的区别(面试)
c. 重写equals方法
所以类都继承自Object,都默认有Object的equals方法,默认是比较地址的,所以要重写equals方法,比较来个引用类型的地址而不是内容
d. equals 方法的案例:
(2)toString 方法
Object 的toString 方法如下:默认返回:
全类名+@+地址号的十六进制
源码如下:
很多类已经重写了toString 了,比如String
返回了字符串本身
引用类重写toString() 方法,返回属性值
注意事项:
println§ 中默认调用了p的toString()
字符串拼接(“hello”+p)也默认使用了p的toString()
public static void main(String[] args) {
//Person 类中已经重写了toString 方法
/* @Override
public String toString() {
return name+"\t"+age;
}*/
Person p1 = new Person("zhangsan", 20);
//println 打印默认调用了toString() 方法
//以下倆行代码执行结果一样 zhangsan 20
System.out.println(p1.toString());
System.out.println(p1);
//字符串拼接也默认调了toString 方法
//結果為hellozhangsan 20
String detail = "hello"+p1;
System.out.println(detail);
}
总结:
(3) hashCode()方法
功能: 返回对象的hash值(约等于对象的地址号)
推论: 如果hash 不一样,则俩个对象不一样
好处: 提高集合中查找相同元素的效率
(4) fanilize()方法
java 是自动垃圾回收机制: 主线程开启, 默认开启了垃圾回收的后台线程
垃圾回收器线程会监控程序执行过程是否有需要回收的对象,如果有,启动回收,不需要程序员手动回收
垃圾回收器回收的对象是该对象没有任何引用指向了
这是Object类的fanilize() 方法,由对象的垃圾回收器调用,如果子类重写就是想要在对象回收之前写"遗言"
注意:
Object类中的getClass(),notify(),notifyAll(),wait()等方法被定义为final类型,因此不能重写。