什么是Object类?
在Java中,Object类是所有类的超类, 通俗的讲,就是所有类的都继承Object类。是所有类的“ 祖宗 ”
再者就是,Object类中也包含自己的方法,如:
1.equals(Object obj):判断当前对象的和另一个对象的值是否相等。
2.hashCode():获取当前对象的的哈希值。
3.getClass():获取当前对象的类对象。
4.toString():返回当前对象的字符串表示。

下面我将示例一下toString和equals方法的调用:
1.toString()方法:
我首先创建了一个Animal类,写了age和name的get和set方法:

public class Animal extends Object{
    public int age ;
    public String name ;
    public int getAge(){
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

然后我创建了一个Demo类,创建对象a并调用set方法,然后分别传入参数18和Anna,接着输出对象a:

public class Demo {
    public static void main(String[] args) {
        Animal a =  new Animal();
        a.setAge(18);
        a.setName("Anna");
        System.out.println(a);
    }

我们点击运行,输出结果却不尽人意,是一串神秘的字符,而这串神秘字符,其实就是内存地址,又称作该对象的哈希码。

如果我们想要输出的是我们传入的参数呢,我们可以调用toString方法,而这个方法存在于Object类中,因为所以类的继承于Object类,于是我们直接在子类Animal类重写toString方法,如下:

在idea中重写可以用快捷键Alt+insert,然后出现一个列表,点击toString再选中age和name两个成员变量,点击确定即可:

java中oc是什么意思 java中obj是什么意思_开发语言


最后便生成了这样一串代码

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

然后这时候再在测试类中输出对象时,输出结果便是我们所传的参数了。

2.equals()方法:
同样是Animal类,这里就不在粘贴代码块了,在Demo类中,我们创建两个对象,传入同样的参数,来比较这两个对象的值是否相等,如下:

public class Demo {
    public static void main(String[] args) {
        Animal a =  new Animal();
        a.setAge(18);
        a.setName("Anna");

        Animal b = new Animal();
        b.setAge(18);
        b.setName("Anna");
        System.out.println(a==b);
    }
}

输出结果为false,为什么会这样呢,其实这样子写默认比较的是内存地址值,系统分配给对象的地址是不可能一样的,故输出为false,所以想要比较对象的值需要调用Object类的equals方法,同样快捷键Alt+insert可直接重写equals方法,输出代码如下:

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Animal animal = (Animal) o;
        return age == animal.age && Objects.equals(name, animal.name);
    }

最后在Demo类中再次比较,不过比较形式不再写为a==b,改为了格式为:
a.equals(b),即为:

System.out.println(a.equals(b));

此时输出结果为true。可以仔细观察equals方法的内容,了解它作比较的原理。
当中有一段代码getClass() != o.getClass(),其中调用了getClass的方法,因为getClass的方法可以获取该对象的类对象,所以这一段代码的意思是当前获取的对象的类对象不是另一对象o所获取的类对象,显然我们是在同一类中创建的对象,故两个对象都来自同一类,返回ture。
还有一段 Animal animal = (Animal) o;这段代码的意思是强制将animal变量转换为Animal的对象,这个操作称之为:类型强制转换。转换为对象后,下面就可以调用age方法来比较了。