Object
JDK类库中的老祖宗类。
常用的方法有
-
clone():负责对象克隆的
-
equals():判断两个对象是否相等
所有类的equals()方法都要重写,因为Object中的equals方法使用的是==,比较的是两个对象的内存地址,我们比较内容需要重写。
基本类型判断使用"=="判断,引用类型判断时使用equals方法
//源代码 public boolean equals(Object obj){ return(this == obj); }//以上是Object类的默认实现
通过equals方法来判断两个对象是否相等。没有经过重写的equals方法是用==判断的
判断两个基本数据类型的数据是否相等可以直接使用==.
int a=100;int b=100; System.out.printlin(a==b);
==和equals的区别
==判断的是内存地址,判断两个对象是否相等时,会比较判断引用保存的对象内存地址是否相等,在使用equals判断两个对象是否相等时,未修改的原方法会通过“”来判断两个对象,故不够用,需要重写equals方法来达成判断内容的效果,传入比较的对象时,通常需要强制类型转换,一般生成equals方法时都已经经过处理。
MyTime t1=new MyTime(2019); MyTime t2=new MyTime(2019); System.out.printlin(t1==t2);//结果为false //重写MyTime中的equals方法来实现判断内容相同的功能,可以使用IDEA自动生成 public boolean equals(Object obj){ if(obj instanceof MyTime){//注意强制类型转换 MyTime t=(MyTime)obj; if(this.year==t.year){ return true; } } return false; } class MyTime(){ int year; public MyTime(){} public MyTime(int year){this.year=year;} }
-
finalize():垃圾回收器
这个方法是protected修饰的,源代码是
protected void finalize()throws Throwable{}
-
finalize()方法只有一个方法体,里面没有代码,不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法
-
finalize()方法的执行时机:当一个java对象即将被垃圾回收器回收的时候,垃圾回收器即GC负责调用finalize()方法
-
若希望在对象销毁时机执行一段代码,这段代码要写到finalize()方法中
-
与之对应的是静态代码块
static{
}静态代码块是在类加载时调用,并且只执行一次
-
java中的垃圾回收器不是轻易启动的,垃圾太少,或者时间没动,种种条件下,有可能启动,也有可能不启动
项目开发中有这记录释放时间的需求,负责这段记录的代码写到finalize()方法中
-
-
hashCode():获取对象哈希值
源码是
public native int hashCode();//带有native关键字,底层调用C++程序
hashCode()方法返回的是哈希码:
实际上就是一个java对象的内存地址,经过哈希算法,得出的一个值。
所以hashCode()方法的执行结果可以等同看做一个java对象的内存地址。
-
toString():将对象转换成字符串形式
所有类的toString方法尽量重写
越简单越明了越好
//源代码 public String toString(){ return this.getClass().getName()+"@"+Integer.toHexString(hashCode()); }
作用是将一个java对象转换成字符串返回。默认返回类名加上对象在内存中的十六进制地址。
System.out.println()输出引用时,会自动调用引用的toString()方法