1. 程式人生 > >Java 中Object類的方法

Java 中Object類的方法

Java是單根繼承結構語言,也就是說,Java中所有的類都有一個共同的祖先,這個祖先就是Object類。

如圖所示:Object類中的方法

說明:

 1、hashCode和equals函式用來判斷物件是否相同,  

​
equals()用於確認兩個物件是否相同。
hashCode()用於獲取物件的雜湊值,這個值的作用是檢索,具體的作用可以參考這裡
雜湊值相同的物件不一定equals()
equals()返回true的兩個物件一定相同。

​

     equals()通常用來進行比較,在Object類中,它進行了引用的比較,只有引用相同時會返回true,但是這樣並不是我們想要的比較的情況,比如字串的比較是比較每個字元是否相同。

  ==與equals在Java中經常被使用,大家也都知道==與equals的區別:

      ==表示的是變數值完成相同(對於基礎型別,地址中儲存的是值;引用型別則儲存指向實際物件的地址;)

       equals表示的是物件的內容完全相同,此處的內容多指物件的特徵/屬性。

 public boolean equals(Object obj) {
     return (this == obj);
}

    由此可見,Object原生的equals()方法內部呼叫的正是==,與==具有相同的含義。既然如此,為什麼還要定義此equals()方法?

     equlas()方法的正確理解應該是:判斷兩個物件是否相等。那麼判斷物件相等又是什麼?

   如果自定義的類沒有重寫equals()方法來重新定義此標尺,那麼預設的將是其父類的equals(),直到object基類。

  如果按實際需求,對於StudentBean,由實際的業務需求可知當屬性id相同時,表示的是同一個Student,即兩個Student物件相等。則可以重寫equals以重定義Student物件相等。

​
package com.hlx;

public class Student{

    private int id;
    private String name;
    private int age;


    public Student(int id,String name){
     this.id =id;
     this.name = name;
    }

    public int getId() {
        return id;
    

    public void setId(int id) {
        this.id = id;
    }

    protected 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 obj) {
        if (obj == null || !(obj instanceof Student)) {
            return false;
        }
        if (((User) obj).getId() == this.getId()) {
            return true;
        }
        return false;
    }
}

​

 測試結果:

Student stu1=new Student(1100,"mike");      
Student stu2=new Student(1100,"麥克");  
System.out.println(stu1.equals(stu2)); //返回true

        因為Student類定義中重寫了equals()方法,判斷這兩個人是不是同一個人,這時只用判斷id是否相同即可。

       如上重寫equals方法表面上看上去是可以了,實則不然。因為它破壞了Java中的約定:重寫equals()方法必須重寫hasCode()方法。

 

 2、toString()和getClass是可以在執行時獲得類。 

原始碼如下:

public final native Class<?> getClass();


public boolean equals(Object obj) {
    return (this == obj);
}

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

 


 3、wait(),wait(long),wait(long,int),notify(),notifyAll() 
 4、clone() 
 5、finalize()用於在垃圾回收