张小飞的Java之路——第十一章-Object

文章介绍了Java中的Object类,它是所有类的父类。通过实例展示了Object类的equals方法默认比较对象内存地址,而通过重写可以比较对象内容。此外,还讨论了toString方法的作用,即返回对象的字符串表示,并建议子类复写以提供更清晰的信息。

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

写在前面:

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

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

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

1. 介绍

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

张小飞:这是什么意思?

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

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

比如:
1665239974219.png
“上图中的Animal,虽然没有指明父类,但其实父类就是Object”

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

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

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

结果:1665240094980.png
“原来如此”

2. 常用方法

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

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

1. equals

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

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

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

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));
    }
}

结果:1665240615163.png

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

张小飞:因为 p1 和 p2 分别指向不同的内存地址,如下图:
1665240954772.png
诸小亮:不错,但生活中,我们常常认为身份证号一样就是同一个人,上面的结果是不是。。。。。

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

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

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

再次运行:
image.png
总结一下:

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

2. toString

诸小亮:接着,看 toString 方法

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

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

诸小亮:因为默认的返回值不够清晰,比如:
image.png
结果:image.png

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

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

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

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

结果:image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值