Object类

简介

Object类是Java中所有类的始祖,Java中每一个类都扩展了Object。所以没有见过extends Object的写法,当然也可以写,但没必要。
以下是Object类的全部方法,目前先介绍最常见的两个。
在这里插入图片描述


toString方法

调用toString方法,会将所调用的参数最终以字符串的形式打印。我们最常用的做法就是将toString方法重写,可以打印我们自己想打印的内容。不过在此之前,我们先了解一下toString的调用机制。
下面是演示案例

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

}

public class Test {
    public static void main(String[] args) {
        Person person = new Person("zhangsan" , 18);
        System.out.println(person);

    }
}

在这里插入图片描述
这里打印的是:类名@散列码
现在我们需要查看println的源码(IDEA中按住Ctrl然后点击要查看的内容)
源码
println方法重载了很多个,但是我们传递过去的是person引用,所以我们只看下面那个,由于person是Object的子类对象的引用,所以可以向上转型为Object。之后参数又传递给了valueOf()
在这里插入图片描述
因为引用不为空,所以执行obj.toString()
在这里插入图片描述
最终就来到了Object的toString,我们可以看到它的返回内容。(至于里面到底是什么,现在先不讲)
如果不想打印Object的toString的内容,就需要我们在自定义的类中重写方法。如果我们重写了Object的方法,那么在调用的时候就会发生动态绑定(在多态那一章详细讲解过),最终调用我们重写的方法。

一般来说,我们重写toString方法是为了直接打印我们类的信息,而在IDEA中可以通过一些操作自动生成。鼠标右键,选中Generate,再选中toString。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样就打印出自定义类的信息了。


equals方法

equals方法用于检测一个对象是否等于另一个对象,判断两个对象的引用是否相同。
看以下案例:

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
}

public class Test {

    public static void main(String[] args) {
        Person person = new Person("zhangsan" , 18);
        Person person1 = new Person("zhangsan" , 18);
        System.out.println(person.equals(person1));
    }
}

在这里插入图片描述

这里也许会有同学问:这两个对象不都叫“zhangsan”,年龄不都是18岁吗,怎么就false了。

Object的equals方法,比较对象的引用,因为创建了两个对象,地址不同,所以返回false

如果我们假定张三确实只有一个人,世界上只有一个张三,那他自己的名字肯定等于自己的名字。
这时我们就要重写Object的equals方法

    @Override
    public boolean equals(Object obj) {
        return this.name.equals(((Person)obj).name);
    }


    @Override
    public boolean equals(Object obj) {
        Person tmp = (Person) obj;
        return tmp.name.equals(this.name);
    }

这时调用equals就可以以名字来测试是否相等。以上两个写法均可,不过需要注意的是,我们调用的名字是自定义类的属性,而Object没有这一属性,所以要进行强制类型转换。

这里也许会有同学问,怎么在重写的equals又调用了equals。这啥啊这?
还是需要源码来解释在这里插入图片描述
Object是所有类的始祖,那String类肯定也继承了它,只不过String类觉得需要一个自己用起来适合的equals方法,所以就把它给重写了。String重写的equals方法对于同一个字符串会返回 true,不同的才会返回 false。

来看以下的代码

    public static void main(String[] args) {

        String str1 = "zhangsan";
        String str2 = "zhangsan";
        System.out.println(str1.equals(str2));
        
    }

在这里插入图片描述

总之,我们在今后会根据自己需要的逻辑去重写equals方法。


  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值