一、引言
Object类是所有类的根类,因此所有类都直接或间接的继承自该类。
对于Object类,以下方法值得我们去了解和学习。
二、getClass()方法
1 | Class c = 对象.getClass(); |
getClass()方法是获取类的字节码文件对象的方法,该方法在反射中会使用到。
并且在下文的toString()方法中也有用到,使用简单,不做详细介绍。
三、toString()方法
toString()方法实现原理:类名+@+十六进制的hash值,其源码如下:
1 | public String toString() { |
通过分析源码就会发现输出的其实是一些标识对象的字符串,但是这其实在实际开发中使用的很少,通常都是通过重写该方法,来输出描述该对象的成员变量的值。
四、hashCode()方法
(一)方法介绍
1 | public int hashCode(): 返回对象的hash值 |
不同对象调用hashCode方法的返回值不同;同一个对象多次调用该方法的返回值相同。
原理:该方法通常通过将对象的内部地址转换为整数来实现,但其实还有其它的生成hash值的策略。
(二)方法使用
1 | class Student{ |
结果分析:
1、hashCode()方法生成的是通过地址转换得到的10进制整数;
2、toString()方法则是:类名+@+十六进制的hash值;
3、如果直接输出对象,其实默认调用了该方法的toString方法.
(三)补充
关于hashCode方法的hash值生成策略的更多内容:
Java 对象的内存地址是否就是hash code?
探究常用类的hashCode生成规则
五、equals()方法
(一)方法介绍
1 | public boolean equals(Object obj):指示其他某个对象是否与此对象“相等” |
在介绍其原理之前先回顾一下==
,我们都知道,双等号是在比较两个对象的地址值是否相等,从而判断是否为同一对象。
但其实,Object类中qeuals()方法的实现也是使用了==
,即:也是在比较两个对象的地址值。
qeuals()方法源吗如下:
1 | public boolean equals(Object obj) { |
但其实在实际开发中我们都会重写该方法,使其来比较该类的成员变量值是否相等,如下:
1 | public class Student { |
(二)== 和 equals()的区别
==:
基本类型:比较的就是值是否相同
引用类型:比较的就是地址值是否相同
equals:
引用类型:默认情况下,比较的是地址值。
不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同
六、finalize()方法
1 | protected void finalize() throws Throwable |
当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象进行垃圾回收,但是什么时候回收不确定。( 该方法暂时先了解即可)
七、clone()方法
(一)方法介绍
在实际生活中,当需要修改一份文件时,可能为了防止原始文件被修改,我们会拷贝一份,从而在副本上进行修改。
在编程时也是一样,为了防止原始对象的内容被修改,我们可能会拷贝一个对象,在副本对象上进行修改。为了实现这个功能,
Object类提供了一个clone()方法。
1 | protected Object clone():创建并返回此对象的一个副本。 |
(二)注意事项
要重写该方法,有两点需要注意:
1、需要在类中重写clone()方法。
2、需要使用该方法的类必须实现Cloneable接口。
提供如下案例:
1 | public class Student implements Cloneable { |
补充:
Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。
这个接口是标记接口(同样类型的接口还有Serializable),告诉我们实现该接口的类就可以实现对象的复制了。
Java新手,若有错误,欢迎指正!