写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?

1. 介绍

诸小亮:来说说 Object 类——所有类的父类

张小飞:这是什么意思?

“Object是一个JDK中的一个类,它是所有类的父类,里面定义了所有对象都具备的功能

“这个,能否说的再次详细一些?”

比如:

什么是javadoc 什么是JAVA中所有类的父类_内存地址


“上图中的Animal,虽然没有指明父类,但其实父类就是Object”

“空口无凭,得证明一下吧”

“这简单,看下面代码:”

public static void main(String[] args){
    Animal a = new Animal();
    //使用 instanceof 可以判断是不是对应类型
    if(a instanceof Object){
        System.out.println("Animal是Object的子类。。。。");
    }
}

结果:

什么是javadoc 什么是JAVA中所有类的父类_开发语言_02


“原来如此”

2. 常用方法

张小飞:师兄,您刚才说Object类中,定义了所有对象都具备的功能,具体有哪些呢?

诸小亮:有很多,但目前我们只学些两个:equals 和 toString

1. equals

“equals:用来判断两个对象是否相同 ,这是它的源码:”

什么是javadoc 什么是JAVA中所有类的父类_开发语言_03


张小飞:两个对象之间用 == ,比较的是它们的内存地址吗?

诸小亮:是的,看下面代码

class People{
    int idCard;//身份证号
}
public class Demo{
    public static void main(String[] args){
        People p1 = new People();
        p1.idCard=410184;
        
        People p2 = new People();
        p2.idCard=410184;
        
        //equals:如果两个引用指向同一块儿内存就返回 true,否则返回 false
        System.out.println(p1.equals(p2));
    }
}

结果:

什么是javadoc 什么是JAVA中所有类的父类_开发语言_04

诸小亮:你是否明白为什么会输出 false ?

张小飞:因为 p1 和 p2 分别指向不同的内存地址,如下图:

什么是javadoc 什么是JAVA中所有类的父类_java_05


诸小亮:不错,但生活中,我们常常认为身份证号一样就是同一个人,上面的结果是不是。。。。。

张小飞:我也注意到了,它们只是内存地址不同,但是里面的内容却是一模一样

诸小亮:这时,可以通过复写equals方法,比较对象中的内容,达到我们想要的效果,比如:

class People{
    int idCard;//身份证号
    //复写equals方法,内部比较对象的属性,属性相同就认为两个对象一样
    public boolean equals(People p){
        return this.idCard == p.idCard;
    }
}

再次运行:

什么是javadoc 什么是JAVA中所有类的父类_java_06


总结一下:

如果是基本变量,就用 ==(等值比较)
如果是对象,复写 equals 方法,比较对象内部的属性是否一样

2. toString

诸小亮:接着,看 toString 方法

作用:返回对象的字符串形式,java中建议 Object 的所有子类都复写这个方法

张小飞:为什么要复写这个方法?

诸小亮:因为默认的返回值不够清晰,比如:

什么是javadoc 什么是JAVA中所有类的父类_父类_07


结果:

什么是javadoc 什么是JAVA中所有类的父类_开发语言_08

张小飞:这不是还没调用 toString 方法的吗?

诸小亮:其实在 println方法内部,已经自动调用toString()方法,比如:

什么是javadoc 什么是JAVA中所有类的父类_开发语言_09


什么是javadoc 什么是JAVA中所有类的父类_内存地址_10

张小飞:原来如此,复写 toString 方法后确实会更清晰

public String toString(){
    //复写后的结果,更加简明易懂
    return "People[age=" + this.age + "]";
}

结果:

什么是javadoc 什么是JAVA中所有类的父类_内存地址_11