一、Object类 

  1. object类介绍 
  1. object类是所有类的父类,一个类会直接或间接的继承自该类,该类中提供了一些非常常用的方法
  1. toString()方法
  1.  作用:打印对象的信息
  2. 重写前:打印的是包类名@地址值
  3. 重写后:打印的是对象中的属性值
  1. equals()方法
  1. 作用:比较两个对象的
  2. 重写前:比较的是对象的地址值
  3. 重写后:比较的是对象中的属性值
public class Student{
    private String name;
    private int age;
    public Student(){

    }

    public Student(String name, int age) {
        this.name = name;
        this.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;
    }

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

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

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
public class Test1 {
    public static void main(String[] args) {
        String str="abc";
        System.out.println(str);

        Student student=new Student("李白",33);
        System.out.println(student);
    }
}

java 打印对象内存 java打印object内容_java 打印对象内存

public class Test2 {
    public static void main(String[] args) {
        String str1="abc";
        String str2="abc";

        System.out.println(str1.equals(str2));

        Student student1=new Student("李白",34);
        Student student2=new Student("李白",34);
        System.out.println(student1.equals(student2));
    }
}

 

java 打印对象内存 java打印object内容_bc_02

二、Objects类

  1. equals()方法
  1. 比较两个对象是否相同,但是加了一些健壮性的判断,容忍空指针

/* public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }*/


public class Test3 {
    public static void main(String[] args) {
        String str1=null;
        String str2="abc";

        boolean result=Objects.equals(str1,str2);
        System.out.println(result);
    }
}

java 打印对象内存 java打印object内容_java 打印对象内存_03

 

重写Object


/*
* Person类默认继承自Object类,所以可以使用Object类中的toString方法
* String toString()返回该对象的字符串表示
* */
Person p=new Person();
String s=p.toString();
System.out.println(s);
//        直接打印对象的名字,其实就是调用对象的toString方法 p=p.toString()
System.out.println(p);

 

/*直接打印对象的的地址值没有意义,需要重写Object类的toString方法
* 打印对象的属性(name,age)*/

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

java 打印对象内存 java打印object内容_java_04

toString方法


/*看一个类是否重写了toString方法,直接打印这个类对应对象的名字即可
 * 如果没有重写toString方法,那么打印的就是对象的地址值
 * 如果重写toString方法,那么就按照重写的方式打印*/
Random r=new Random();
        System.out.println(r);
        System.out.println("~~~~~~~~~~~~~~~~~~~~");

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

        ArrayList list=new ArrayList();
        list.add(1);
        list.add(2);
        System.out.println(list);

java 打印对象内存 java打印object内容_java 打印对象内存_05

Equals方法


/*
* Person类继承了Object类,所以可以使用Object类的equals方法
* boolean equals(Object obj) 指示其他某个对象是否与此对象”相等“
* Object类equals方法的源码:
* public boolean equals(Object obj){
*   return this==obj;
* }
* 参数:Object obj:可以传递任意的对象
* 方法体:
* ==:比较运算符,返回的是一个布尔值 true、false
* 基本数据类型:比较的是值
* 引用数据类型:比较的是两个对象的地址值
* this是谁?哪个对象调用的方法,方法中的this就是那个对象
* obj是什么?传递过来的参数
* this==obj-->person1==person2*/
public class Demo02Equals {
    public static void main(String[] args) {
        /*
        * Person类继承了Object类,所以可以使用Object类的equals方法
        * boolean equals(Object obj) 指示其他某个对象是否与此对象”相等“
        * Object类equals方法的源码:
        * public boolean equals(Object obj){
        *   return this==obj;
        * }
        * 参数:Object obj:可以传递任意的对象
        * 方法体:
        * ==:比较运算符,返回的是一个布尔值 true、false
        * 基本数据类型:比较的是值
        * 引用数据类型:比较的是两个对象的地址值
        * this是谁?哪个对象调用的方法,方法中的this就是那个对象
        * obj是什么?传递过来的参数
        * this==obj-->person1==person2*/
        Person person1=new Person("张三",22);
        Person person2=new Person("张三",22);

        boolean b=person1.equals(person2);
        System.out.println(b);

        System.out.println("person1:"+person1);
        System.out.println("person2:"+person2);
    }
}

 

java 打印对象内存 java打印object内容_java_06

@Override
    public boolean equals(Object obj) {
//        增加一个判断,传递的参数obj是this本身,直接返回true,提高程序效率
        if (obj==this){
            return true;
        }
//        增加一个判断,若传递的参数obj是null直接返回false,提高程序的效率
        if (obj==null){
            return false;
        }
//        增加一个判断,是Person类型在转换,防止类型转换异常ClassCastException
        if (obj instanceof Person){
            //使用向下转型(强转)把Object类型转换为Person
            Person person=(Person)obj;
//        比较两个对象的属性,一个是调用方法的this(person1),一个就是person(obj=person2)
            boolean b=this.name.equals(person.name)&&this.age==person.age;
            return b;
        }
//        不是Person类型直接返回false
        return false;
    }