Object时是所有类的父类

类 Object 是类层次结构的根类。

每个类都使用 Object 作为超类。

所有对象(包括数组)都实现这个类的方法。

java打印object类型 java打印object内容_java打印object类型

方法摘要

java打印object类型 java打印object内容_java打印object类型_02

Obiect类的tostring方法

toString() 返回该对象的字符串表示。

直接打印对象的名字,其实就是调用tostring方法,

重写之前是获取地址值。

看一个类是否重写了tostring方法,直接打印这个类对应的对象的名字即可,

java打印object类型 java打印object内容_System_03


Person.java

package demo01.Object;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

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


    /*
    直接打印对象的地址值没有意义,重写tostring方法
    打印对象的属性:name,age。
     */

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

Demo01ToString.java

package demo01.Object;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/*
类 Object 是类层次结构的根类。
每个类都使用 Object 作为超类。
所有对象(包括数组)都实现这个类的方法。
 */
public class Demo01ToString {
    public static void main(String[] args) {
        //person默认继承了Object类,所以可以使用ToSting方法
        /*toString()
        返回该对象的字符串表示。*/

        Person p = new Person("laoba",23);
        String s = p.toString();
        System.out.println(s);//重写之前:demo01.Object.Person@1b6d3586
        System.out.println(p);//重写之前:demo01.Object.Person@1b6d3586

        /*
        直接打印对象的名字,其实就是调用tostring方法,重写之前是获取地址值

        看一个类是否重写了tostring方法,直接打印这个类对应的对象的名字即可,
         */

        Random r = new Random();
        System.out.println(r);

        Scanner sc = new Scanner(System.in);
        System.out.println(sc);

        ArrayList<Integer> list = new ArrayList<>();//此类重写了tostring方法
        list.add(1);
        list.add(2);
        System.out.println(list);
    }
}

java打印object类型 java打印object内容_字符串_04


由以上结果可见,ArrayList<>()类重写了tostring方法

Obiect类的equals方法

equals(Object obj) 指示其他某个对象是否与此对象“相等”。

equals方法默认比较的是两个对象的地址值,没有意义。
需要重写,比较两个对象的属性值(name,age)

问题:
有一个多态,equals方法传递的值Object类型,
可以使用向下转型(强转),将Object类型转换为Person类型

@Override
    public boolean equals(Object obj) {

        //如果是null,直接返回false,提高效率
        if(obj == null) return false;

        //如果是自身,则返回true,提高效率
        if(obj == this) return true;

        //是Person类型,可以使用向下转型(强转),

        if(obj instanceof Person){
            //将Object类型转换为Person
            Person p = (Person)obj;
            boolean b = this.name.equals(p.name) && (this.age == p.age);
            return b;
        }
        else {
        //不是Person类型,返回false
            return false;
        }

        //比较两个对象的属性


    }

Demo02Equals.java

package demo01.Object;

import java.util.Random;

/*
equals(Object obj) 指示其他某个对象是否与此对象“相等”。
 */
public class Demo02Equals {
    public static void main(String[] args) {
        Person p1 = new Person("laoba",17);
        Person p2 = new Person("giao",22);
        Person p3 = new Person("laoba",17);
/*
引用数据类型比较的是地址值。
 */

        System.out.println(p1.equals(p2));//false
        System.out.println(p1.equals(p3));//true

        Random r = new Random();
        System.out.println(p1.equals(r));//false

        System.out.println(p1.equals(null));//false
    }
}

java打印object类型 java打印object内容_java打印object类型_05

Objects类的equals方法

为了防备可能为null的情况,需要使用Objects.equals方法。

如果两个参数都为null,Objects.equals(ab)调用将返回true;
如果其中一个参数为null,则返回false;
如果两个参数都不为null,则调用a.equals(b)。

package demo01.Object;

import java.util.Objects;

public class Demo03Objects {
    public static void main(String[] args) {
        String s1 = null;
        String s2 = "aaa";

        //boolean b1 = s1.equals(s2); //null不能调用方法,会抛出空指针异常
        //System.out.println(b1);

        //防止空指针异常
        boolean b2 = Objects.equals(s1,s2);
        System.out.println(b2);
        
        b2 = Objects.equals(null,null);
        System.out.println(b2);

    }
}

java打印object类型 java打印object内容_java打印object类型_06


java打印object类型 java打印object内容_System_07