JavaSE基础——(11)Object类及常用方法

目录

一、Object类概述

二、getClass方法

三、toString方法

四、equals方法


我们在进行java开发时,不需要从最底层开始编写自己的程序,java已经提供给我们了一些可以使用的类,

这些类将底层的实现封装起来了,我们也不需要关心这些类如何实现的,只需要知道如何使用即可。

一、Object类概述

Object类是所有类层次结构的跟类,所有类都直接或者间接继承自该类,

当用户定义了一个自己的类时,如果没有显示指出是继承哪个类的,那么这个类就是默认继承Object类,

二、getClass方法

Object对象作为所有对象的基类,其中有一个比较重要的方法getClass,

该方法返回此对象的运行类,返回类型Class为类对象,接着我们通过Class类中的getName方法输出运行类的名字,

我们通过一段程序来体会一下getClass方法如何使用,

public class InnerOuter {
    public static void main(String []args){
        Outer outer=new Outer();
        Class temp=outer.getClass();
        System.out.println(temp.getName());
    }
}

class Outer{
}

结果可以看到输出了类的名字,

三、toString方法

Object对象中还有一个toString方法,我们可以看看源码这个方法是做什么的,

在java的API说明文档中,描述该方法返回对象的字符串表现形式,实现源码如下:

getClass().getName() + '@' + Integer.toHexString(hashCode());

我们可以看到前面的getClass和getName我们之前已经使用过了,后面的Integer.toHexString(hashCode())表示的是该对象的地址空间,并且是十六进制表示的,

使用toString方法还有一个很方便的好处,就是可以用户自己重写该方法,直接显示类中包含的属性值,

因为该功能非常好用,所以很多类在继承Object类时重写了toString方法,

这样就可以直接看到类中包含什么属性,还有一个值得注意的是,如果直接打印某个对象,系统会隐式调用toString方法,打印出返回的String类型字符串。

在IDEA中有一个快捷键可以自动生成重写后的toString方法,组合为Alt+Insert键,然后选择toString方法即可

public class InnerOuter {
    public static void main(String []args){
        Person p=new Person();
        System.out.println(p);
    }
}

class Person{
    //请输入你的代码
    public String name="testName";
    public int age=20;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

我们可以看到输出结果,

四、equals方法

Object中的equals方法是比较对象的地址值的,没有什么实际意义,我们需要重写,

在开发中我们通常需要比较对象中的属性值,只有属性值相同了我们才认为两个对象相同,

同样的在IDEA中我们可以使用Alt+Insert键来自动生成重写后的equals方法,接着我们用一段代码测试一下重写后的equals方法:

import java.util.Objects;

public class InnerOuter {
    public static void main(String []args){
        Person p1=new Person("name1",20);
        Person p2=new Person("name1",20);
        System.out.println(p1.equals(p2));
    }
}

class Person{
    //请输入你的代码
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }

    public String name="testName";
    public int age=0;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }
}

可以看到输出结果:

Tips:这里有个需要注意的点,就是==号和equals方法,

两者都是作比较的运算,而且返回值类型都是boolean,

他们主要有两点区别:

  • ==号是比较运算符,既可以比较基本数据类型(值比较),也可以比较引用数据类型(地址值比较)
  • 而equals只能比较引用数据类型,默认底层依赖的是==号,重写之后比较的是引用数据类型的各个属性是否相同

猜你喜欢

转载自blog.csdn.net/weixin_39478524/article/details/112326225