java-object类介绍

本文深入解析Java中的Object类,作为所有类的基类,Object提供了关键的方法如equals(), hashCode(), toString()等,用于对象的比较、哈希码生成及字符串表示。同时探讨了getClass(), clone(), wait(), notify()等方法的作用及实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java-object类介绍

java中object类是所有类的基类,它位于java.lang包中。Object类没有定义属性,12个方法,如下:

java.lang Object

是每一个类的根类,每个类都直接或间接的继承Object类。 子类的构造方法默认访问的是父类的无参构造方法

public final Class getClass()

返回Object运行时类。也就是说是字节码文件对象。

// getClass方法会返回一个Class类的实例对象,然后调用Class类的getName()方法
Person s = new Person();
System.out.println(s.getClass().getName()); 
//com.***.***.Person(返回全路径名包名+类名)

protected Object clone()

clone函数返回的是一个引用,指向的是新的clone出来的对象,此对象与原对象分别占用不同的堆空间。

clone详解看了一个链接: https://blog.youkuaiyun.com/zhangjg_blog/article/details/18369201#0-qzone-1-28144-d020d2d2a4e8d1a374a433f596ad1440

public boolean equals(Object obj)

==和equals的区别见下面

String类重写了equals方法,所有String.equals可以比较两个字符串内容是否相等。 equlas()方法的正确理解应该是:判断两个对象是否相等。那么判断对象相等的标尺又是什么?

如上,在object类中,此标尺即为==。当然,这个标尺不是固定的,其他类中可以按照实际的需要对此标尺含义进行重定义。如String类中则是依据字符串内容是否相等来重定义了此标尺含义。如此可以增加类的功能型和实际编码的灵活性。当然了,如果自定义的类没有重写equals()方法来重新定义此标尺,那么默认的将是其父类的equals(),直到object基类。

public int hashCode()

hashCode()方法返回一个整形数值,表示该对象的哈希码值。 如果两个对象用equals判断相等,那么这两个对象的哈希码也相等;反之两个对象的哈希码相等,equals比较却不一定相等。

public String toString()

Object中实现代码如下:

public String toString(){
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

getClass()返回对象的类对象,get;ClassName()以String形式返回类对象的名称(含包名)。Integer.toHexString(hashCode())则是以对象的哈希码为实参,以16进制无符号整数形式返回此哈希码的字符串表示形式。

wait():

调用此方法所在的当前线程等待,直到在其他线程上调用此方法的主调(某一对象)的notify()/notifyAll()方法。

wait(long timeout)/wait(long timeout, int nanos):

调用此方法所在的当前线程等待,直到在其他线程上调用此方法的主调(某一对象)的notisfy()/notisfyAll()方法,或超过指定的超时时间量。

notify()/notifyAll()

唤醒在此对象监视器上等待的单个线程/所有线程。

protected void finalize():

空实现,jvm对内存空间进行垃圾回收时会调用此方法

==和equals的区别

1:对于基础数据类型来(byte、short、int、String、char、float、double、boolean)说,比较相等使用 == 号

2:对于引用数据类型(类、接口、数组),分3种情况

(1)== 始终比较的是两个变量的地址

(2)Object类的equals方法,比较的也是两个变量的地址

boolean equals(Object o2){
    
      return this == o2;
    
    }

(3)java.util.String类重写了从父类Object继承过来的equals方法,

比较两个字符串的内容是否完全相等,所有String.equals可以比较具体内容。

总结成一句话:对于引用数据类型来说,==和equals都是来比较两个变量的地址,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值