1. 程式人生 > 其它 >26Object類的toString方法(應用)

26Object類的toString方法(應用)

1 Object類的toString方法(應用)

  • Object類概述

    • Object 是類層次結構的根,每個類都可以將 Object 作為超類。所有類都直接或者間接的繼承自該類,
      換句話說,該類所具備的方法,所有類都會有一份
  • 檢視方法原始碼的方式

    • 選中方法,按下Ctrl + B
  • 重寫toString方法的方式

      1. Alt + Insert 選擇toString
      2. 在類的空白區域,右鍵 -> Generate -> 選擇toString
  • toString方法的作用 :

    • 以良好的格式,更方便的展示物件中的屬性值

示例程式碼:

public class Student extends Object {
    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 +
                '}';
    }
}
/*
    Object 是類層次結構的根,每個類都可以將 Object 作為超類。所有類都直接或者間接的繼承自該類

    看方法原始碼:選中方法,按下Ctrl+B

    建議所有子類重寫此方法:toString()
    怎麼重寫呢?自動生成即可 Alt+Insert
 */
public class ObjectDemo {
    public static void main(String[] args) {
        Student s = new Student();
        s.setName("林青霞");
        s.setAge(30);
        System.out.println(s); //com.itheima_01.Student@3f3afe78
        System.out.println(s.toString()); //com.itheima_01.Student@3f3afe78

        /*
        public void println(Object x) { //x = s;
            String s = String.valueOf(x);
            synchronized (this) {
                print(s);
                newLine();
            }
        }

        public static String valueOf(Object obj) { //obj = x;
            return (obj == null) ? "null" : obj.toString();
        }

        public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
         */

    }
}

2 Object類的equals方法(應用)

  • equals方法的作用

    • 用於物件之間的比較,返回true和false的結果
    • 舉例:s1.equals(s2); s1和s2是兩個物件
  • 重寫equals方法的場景

    • 不希望比較物件的地址值,想要結合物件屬性進行比較的時候。
  • 重寫equals方法的方式

      1. alt + insert 選擇equals() and hashCode(),IntelliJ Default,一路next,finish即可

      2. 在類的空白區域,右鍵 -> Generate -> 選擇equals() and hashCode(),後面的同上。

示例程式碼:

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 boolean equals(Object o) {
        //this -- s1
        //o -- s2
        
        //比較地址是否相同
        if (this == o) return true;
        
        //判斷引數是否為空,判斷是否來自於同一個類
        if (o == null || getClass() != o.getClass()) return false;
		
        //向下轉型
        Student student = (Student) o; //student -- s2
		
        //比較年齡是否相同
        if (age != student.age) return false;
        //比較姓名是否相同
        return name != null ? name.equals(student.name) : student.name == null;
    }

}

測試:

/*
    測試類

    public boolean equals​(Object obj):指示一些其他物件是否等於此
 */
public class ObjectDemo {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(30);

        Student s2 = new Student();
        s2.setName("林青霞");
        s2.setAge(30);

        //需求:比較兩個物件的內容是否相同(不能進行比較)
//        System.out.println(s1 == s2);

        //需要重寫equals方法
        System.out.println(s1.equals(s2));

        /*
            public boolean equals(Object obj) {
                //this -- s1
                //obj -- s2
                return (this == obj);
            }
         */

    }
}