Java中的Object類



1. 簡介

  類層次結構最頂層的基類,所有類都直接或間接的繼承自Object類,所有的類都是一個Object(對象)。API


2. 構造方法

  • Object():構造一個對象,所有子類對象初始化時都會優先調用該方法。

3. 常用成員方法

方法名 描述
int hashCode() 返回對象的哈希碼值,該方法通過對象的地址值進行計算,不同對象的返回值一般不同。
Class<?> getClass() 返回調用該方法對象的運行時類的對象(調用者的字節碼文件)
String toString() 返回該對象的字符串表示。
boolean equals() 返回其他某個對象是否與此對象“相等”,默認情況下比較兩個對象的引用(地址值),建議重寫。

4. 重寫Object類中的方法

使用場景:

  • 將對象轉換成字符串形式進行傳輸
  • 比較兩個對象是否相等
  • 定義標準JavaBean類,重寫toString和equals方法。

5. 測試Object中的方法

/**
 * 學習Object類
 * 注意:java.lang包下的類可以直接使用,不需要導入包。
 */
public class Text {
    public static void main(String[] args) {
        //非靜態方法的調用方式:通過 對象名. 的形式調用。
        //1. 創建Object類型的對象
        Object obj1 = new Object();
        Object obj2 = new Object();

        //2. 測試Object類中的成員方法
        //2.1 hashCode:不同對象的哈希碼值一般不同
        int code1 = obj1.hashCode();
        int code2 = obj2.hashCode();
        System.out.println(code1);
        System.out.println(code2);

        System.out.println("-------------分割線---------------");
        //2.2 Class<?> getClass():一個類只有一個字節碼對象。
        Class cls1 = obj1.getClass();
        Class cls2 = obj2.getClass();
        System.out.println(cls1);
        System.out.println(cls2);

        System.out.println("-------------分割線---------------");
        //2.3 String toString():返回對象的字符串形式,默認返回的是地址值,不同的對象有不同的返回值
        //地址值的組成:全類名@該對象的哈希碼的無符號十六進制形式
        String s1 = obj1.toString();
        String s2 = obj2.toString();
        System.out.println(s1);
        System.out.println(s2);

        System.out.println("-------------分割線---------------");
        //2.4 boolean equals():比較兩個對象是否相等,默認比較地址值(無意義),子類一般會重寫。
        boolean b = obj1.equals(obj2);
        System.out.println(b);
    }
}

運行結果:

356573597
1735600054
-------------分割線---------------
class java.lang.Object
class java.lang.Object
-------------分割線---------------
java.lang.Object@1540e19d
java.lang.Object@677327b6
-------------分割線---------------
false

6. 案例

  1. 定義學生類,重寫toString和equals方法
/**
 * 類:Student
 * 屬性:name、id、age
 * 方法:setter、getter和重寫的toString、equals
 */
public class Student {
    //成員變量
    private String name;
    private int id;
    private int age;
    //構造方法
    public Student() {
    }
    public Student(String name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }
    //getter和setter
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    //重寫toString方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", age=" + age +
                '}';
    }
	//重寫equals方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        Student student = (Student) o;
        return id == student.id &&
                age == student.age;
    }
}
  1. 編寫測試類測試toString()和equals()方法
/**
 * 重寫Object中的toString和equals方法
 */
public class Test {
    public static void main(String[] args) {
        //測試toString
        Student s1 = new Student("張三", 1, 18);
        System.out.println(s1);
        System.out.println(s1.toString());

        System.out.println("---------------分割線-------------------");
        //測試equals
        Student s2 = new Student("張三", 1, 18);
        System.out.println("s2和s1比較:" + s2.equals(s1));
        Student s3 = new Student("李四", 2, 17);
        System.out.println("s3和s1比較:" + s3.equals(s1));
    }
}

運行結果:

Student{name='張三', id=1, age=18}
Student{name='張三', id=1, age=18}
---------------分割線-------------------
s2和s1比較:true
s3和s1比較:false


時間:2019年10月23日23:39:02


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章