Object类
一.概述
1.超类,基类,所有类的间接或直接父类,位于继承树的最顶端
2.任何类如果没有书写extends方法继承某个类,则默认继承Object类。否则为间接继承
3. Object类中所定义的方法是所有对象都具有的方法
4. Object类型可以存储任何对象
-
作为参数可以接受任何对象
-
作为返回值可以接受任何对象
二.常用方法
1.getClass()方法
- public final Class<?> getClass()
- 返回引用中存储的实际对象类型
- 应用:通常用于判断两个引用中实际存储对象类型是否一致
public class Student {
//属性字段
private String name;
private int age;
public Student() {//构造方法
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class TestStudent {
public static void main(String[] args) {
Student s1 = new Student("a",6);
Student s2 = new Student("b",3);
//判断s1和s2是不是同一类型
Class class1 = s1.getClass();
Class class2 = s2.getClass();
if (class1 == class2){
System.out.println("true");
}else {
System.out.println("false");
}
}
}
//输出结果为true
2.hashCode()方法
- public int hashCode ()
- 返回该对象的哈希码值
- 哈希值根据对象的地址或字符或数字使用hash算法计算出来的int类型的数值
- 一般情况下相同对象返回的相同哈希码值
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
Student s3 = s1;//两个对象指向同一个地址
System.out.println(s3.hashCode());
//输出结果为:
168423058
821270929
168423058
3.toString()方法
- public String toString ()
- 返回该对象的字符串表示(表现类型)
- 可以根据程序需求覆盖该方法,如:展示对象的各个属性值
//Object类中toString方法说明
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
//toString方法
System.out.println(s1.toString());
System.out.println(s2.toString());
//输出结果:
study01.Object.Student@a09ee92
study01.Object.Student@30f39991
//重写toString方法
@Override
public String toString() {
return name + ":" +age;
}
//toString方法
System.out.println(s1.toString());
System.out.println(s2.toString());
//输出结果:(s1和s2的属性字段值)
a:6
b:3
4.equals方法
- public boolean equals (Object obj)
- 默认实现为(this == obj),比较两个对象地址是否相等
- 可进行覆盖,比较两个对象内容是否相同
//equals方法
System.out.println(s1.equals(s2));//比较地址输出false(this:s1,obj:s2)
- equals方法覆盖步骤
- 比较两个引用是否指向同一个对象
- 判断obj是否为null
- 判断两个引用指向的实际对象类型是否一致
- 强制类型转换
- 依次比较各个属性值是否相同
//重写Object类的equals方法
@Override
public boolean equals(Object obj) {
//1.判断两个对象引用指向是否相同
if (this == obj){
return true;
}
//2.判断obj是否为null
if ( obj == null ){
return false;
}
//3.判断是否是同一个类型
if ( obj instanceof Student){
//4.强制类型转换
Student s = (Student)obj;
//5.比较属性值
if ( this.name.equals(s.getName()) && this.age == s.getAge()){
return true;
}
}
return false;
}
Student a = new Student("小明",10);
Student b = new Student("小明",10);
System.out.println(a.equals(b));//重写后比较的为内容,输出true
5.finalize()方法
- 当对象被判为垃圾对象,Jvm自动调用该方法,用以标记垃圾对象进入回收队列
- 垃圾对象:没有有效引用指向该对象时,为垃圾对象
- 垃圾回收:由GC销毁垃圾对象,释放数据储存空间
- 自动回收机制:当JVM内存耗尽,一次性回收所有垃圾对象
- 手动回收机制:使用System.gc,通知JVM回收垃圾对象
//方法重写
@Override
protected void finalize() throws Throwable {
System.out.println(this.name + "对象被回收了");
}
//finalize()方法;
Student c = new Student();//堆里的内存空间有对象c,d指向,不会被回收
Student d =new Student();
new Student("bb",13);//无对象指向的内存空间会被gc操作回收
new Student("aa",12);
System.gc();
//结果输出:
aa对象被回收了
bb对象被回收了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!