13.java object類
概念
object 類位於 java.lang 包中,是所有 Java 類的祖先,Java 中的每個類都由它擴充套件而來.
在定義一個類時,如果沒有明確的繼承一個父類的話,那麼它繼承的就是object類。
常用方法
取的物件資訊:public String toString()
Object 類的 toString 方法返回一個字串,該字串由類名(物件是該類的一個例項)、標記符“@”和此物件雜湊碼的無符號十六進位制表示組成。
該方法用得比較多,一般子類都有覆蓋。
public String toString(){ return getClass().getName() + "@" + Integer.toHexString(hashCOde()); }
getClass()方法返回Object的執行時類型別。不可重寫,要呼叫的話,一般和getName()聯合使用,如getClass().getName();
示例
class Book{} class A{ public String toString(){ return "A類過載的toString"; } } public class testDemo { public static void main(String[] args) { Book b = new Book(); String s = "hello"; A a = new A(); System.out.println(b); System.out.println(b.toString()); System.out.println(s); System.out.println(a); } } 輸出結果: Book@15db9742 Book@15db9742 hello A類過載的toString
在進行物件輸出的時候,輸出操作會自動呼叫物件中的toString方法。Object類中的toString()方法為了適應所有物件的輸出,所以只輸出了物件的編碼。
物件比較: public boolean equals(Object obj)
Object中的equals方法是直接判斷this和obj本身的值是否相等,即用來判斷呼叫equals的物件和形參obj所引用的物件是否是同一物件.
public boolean equals(Object obj){ return (this == obj) }
該方法在開發中會經常使用到,如果要進行類的相等判斷,一般要進行重寫。
示例:
class Book{ private String title; private double price; public Book(String title, double price){ this.title = title; this.price = price; } public String toString(){ return "書名:" + this.title + ",價格:" + this.price; } public boolean equals(Object obj){ if(this == obj){ return true; } if(obj == null){ return false; } if(!(obj instanceof Book)){ return false; } Book b = (Book) obj; if (this.title.equals(b.title) && this.price == b.price){ return true; }else{ return false; } } } public class testDemo { public static void main(String[] args) { Book b1 = new Book("java開發", 66.66); Book b2 = new Book("java開發", 66.66); Book b3 = new Book("java開發", 65.0); System.out.println(b1.equals(b2)); System.out.println(b1.equals(b3)); System.out.println(b1.equals("hello")); } } 輸出結果: true false false
取的物件hash碼:public int hashCode()
按照一定的演算法由物件得到的一個數值,雜湊碼沒有規律。
public native int hashCode();
hashCode() 方法主要用來在集合中實現快速查詢等操作,也可以用於物件的比較。
在 Java 中,對 hashCode 的規定如下:
- 在同一個應用程式執行期間,對同一個物件呼叫 hashCode(),必須返回相同的整數結果——前提是 equals() 所比較的資訊都不曾被改動過。至於同一個應用程式在不同執行期所得的呼叫結果,無需一致。
- 如果兩個物件被 equals() 方法視為相等,那麼對這兩個物件呼叫 hashCode() 必須獲得相同的整數結果。
- 如果兩個物件被 equals() 方法視為不相等,那麼對這兩個物件呼叫 hashCode() 不必產生不同的整數結果。
簡單地說:如果兩個物件相同,那麼它們的 hashCode 值一定要相同;如果兩個物件的 hashCode 值相同,它們並不一定相同。在 Java 規範裡面規定,一般是覆寫 equals() 方法應該連帶覆寫hashCode() 方法。