Java基础之——Object类的基本使用
概述
在Java中所有的类都直接或间接继承了java.lang,Object类,Object是所有类的父类
当定义一个类没有extends关键字显式指定继承的父类,编译器自动加上extends java.lang.Object
Object类中主要包括的方法有:
- clone()
- finalize()
- equals()
- toString()
所有的类都可以重写Object类的方法
Object中的getClass()、notify()、notifyAll()、wait()等方法不能被重写,因为这些方法被定义为final类型
getClass()
作用:返回对象执行时的Class实例,然后使用此实例调用getName()方法可以取得类的名称
语法:getClass().getName()
toString()
作用:将一个对象返回为字符串形式
打印本类对象
String s = test.getClass().getName();
System.out.println(s);
equals()
==与equals的区别:
==比较的是两个对象的引用是否相等,而equals方法比较的是两个对象的实际内容
equals默认实现是使用==比较两个对象的引用地址,所以想要比较对象的内容,需要重写该方法
String、Interger、Double等许多类已经覆盖了Object类中的equals()方法,功能改为比较两个对象的内容是否相等
如果覆盖了equals()方法,则必须覆盖hashCode()
public boolean equals(Object obj) {
return (this == obj);
}
clone()
作用:用于对象内容的备份
- 基本类型:直接用赋值语句实现
- 引用类型:
- 对象地址的备份(即指针,在Stack存储),使用赋值语句
- 对象内容的备份(在Heap堆中存储),使用clone()方法
clone()方法只能实现浅层次的备份(只复制引用类型对象成员的地址,不复制引用类型对象成员引用的对象的内容)
public class Main {
public static void main(String[] args) {
//基本数据类型变量的备份
int i = 100;
int j = i;
//引用类型
HashSet<Character> hs1 = new HashSet<Character>();
hs1.add('a');
hs1.add('b');
//地址的备份
HashSet<Character> hs2 = hs1;
//内容的备份
HashSet<Character> hs3 = (HashSet)hs1.clone();
}
}
hashCode()
作用:返回该对象的HashCode(哈希码)(由当前对象地址转换而成的一个整数)
因此可以通过HashCode来唯一地标识一个对象
finalize()
垃圾回收器按一定的规律回收堆内存中的垃圾
一个对象变为垃圾,指该对象的内存空间没有指针指向(即该对象没有被引用)