Object

JDK类库中的老祖宗类。

常用的方法有

  1. clone():负责对象克隆的
  2. 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;}
}
  1. finalize():垃圾回收器
    这个方法是protected修饰的,源代码是
protected void finalize()throws Throwable{}
  • finalize()方法只有一个方法体,里面没有代码,不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法
  • finalize()方法的执行时机:当一个java对象即将被垃圾回收器回收的时候,垃圾回收器即GC负责调用finalize()方法
  • 若希望在对象销毁时机执行一段代码,这段代码要写到finalize()方法中
  • 与之对应的是静态代码块
    static{
    }静态代码块是在类加载时调用,并且只执行一次
  • java中的垃圾回收器不是轻易启动的,垃圾太少,或者时间没动,种种条件下,有可能启动,也有可能不启动

项目开发中有这记录释放时间的需求,负责这段记录的代码写到finalize()方法中

  1. hashCode():获取对象哈希值
    源码是
public native int hashCode();//带有native关键字,底层调用C++程序

hashCode()方法返回的是哈希码:

实际上就是一个java对象的内存地址,经过哈希算法,得出的一个值。

所以hashCode()方法的执行结果可以等同看做一个java对象的内存地址。

  1. toString():将对象转换成字符串形式
    所有类的toString方法尽量重写
    越简单越明了越好
//源代码
public String toString(){
    return this.getClass().getName()+"@"+Integer.toHexString(hashCode());
}

作用是将一个java对象转换成字符串返回。默认返回类名加上对象在内存中的十六进制地址。

System.out.println()输出引用时,会自动调用引用的toString()方法