1. 程式人生 > >Object類的重要方法

Object類的重要方法

Object是所有類的最終祖先。,可以使用Object類引用任何型別的物件。在Java中,只有基本型別不是物件。

Equals方法

Object類中的equals方法用於檢測一個物件是否等於另外一個物件。在Object類中,這個方法將判斷兩個物件是否具有相同的引用。

但是,我們一般意義上的相等不僅僅是具有相同的引用,如果另個物件的狀態相等,就認為另個物件是相等的。所以,子類要重寫超級類中的equals方法。

Java中,要求equals方法具有下面的特性:

  1. 自反性,x.equals(x)返回ture。
  2. 對稱性,x.equals(y),和y.equals(x)返回相同的值。
  3. 傳遞性,對於任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那麼x.equals(z)也要返回true。
  4. 一致性,如果x和y所引用的物件沒有變化,反覆呼叫x.equals(y)應該返回同樣的結果。
  5. 對於任意非空引用x,x.euqals(null)應該返回false。
如下例,實現了倆個equals方法:
  1. package com.xujin;  
  2. import java.util.Arrays;  
  3. publicclass Test {  
  4.     publicstaticvoid main(String[] args) {  
  5.         Employee employee = new Employee("Bod"5000);  
  6.         Employee staff = employee;  
  7.         Manager manager = new Manager("Bod"80006000);  
  8.         System.out.println(employee.equals(new Employee("Bod"5000)));//true
  9.         System.out.println(employee.equals(staff));//true
  10.         System.out.println(employee.equals(null));//false
  11.         System.out.println(manager.equals(new Manager("Bod"
    80006000)));//true
  12.         System.out.println(employee.equals(manager));//false
  13.         System.out.println(employee instanceof Employee);//true
  14.         System.out.println(employee instanceof Manager);//false
  15.         System.out.println(manager instanceof Employee);//true
  16.         //考察兩個陣列是否相同
  17.         System.out.println(Arrays.equals(newint[]{1,2,3}, newint[]{1,2,3}));//true
  18.     }     
  19. }  
  20. class Employee{  
  21.     public Employee(String name, double salary){  
  22.         this.name = name;         
  23.         this.salary = salary;         
  24.     }     
  25.     publicboolean equals(Object otherObject){  
  26.         //如果兩個物件具有相同的引用,返回true
  27.         if(this == otherObject)   
  28.             returntrue;  
  29.         //如果otherObjext是null,返回false
  30.         if(otherObject == null)   
  31.             returnfalse;  
  32.         //如果兩個物件所屬的類不相同,返回false
  33.         if(this.getClass() != otherObject.getClass())   
  34.             returnfalse;  
  35.         //此時,兩個物件既不是null,他們所屬的類也相同,都為Employee
  36.         Employee other = (Employee)otherObject;  
  37.         return name.equals(other.name) && salary == other.salary;  
  38.     }  
  39.     //定義變數
  40.     privatedouble salary;  
  41.     private String name;  
  42. }  
  43. class Manager extends Employee{  
  44.     public Manager(String name, double salary, double bonus){  
  45.         super(name, salary);  
  46.         this.bonus = bonus;  
  47.     }  
  48.     publicboolean equals(Object otherObject){  
  49.         if(!super.equals(otherObject))  
  50.             returnfalse;  
  51.         Manager other = (Manager)otherObject;  
  52.         return bonus == other.bonus;  
  53.     }  
  54.     privatedouble bonus;  
  55. }  

HashCode方法

雜湊嗎,是由物件匯出的一個整型值。此方法是有Object定義的,返回該物件的儲存地址。所以,如果有必要,子類要對HashCode方法進行重寫。 注意:如果重寫了equals方法,則必須重寫HashCode方法,因為這兩個方法必須一致:如果equals方法返回true,則HashCode方法必須返回相同值。 下例中,String類已經重寫了HashCode方法,使用物件的值匯出雜湊碼,而StringBuilder方法沒有重寫HashCode方法,返回的依然是儲存單元的地址。
  1. package com.xujin;  
  2. publicclass Main{  
  3.     publicstaticvoid main(String...args){  
  4.         String s1 = "Hello,world!";  
  5.         String s2 = new String("Hello,world!");  
  6.         System.out.println(s1.hashCode());//2007142665
  7.         System.out.println(s2.hashCode());//2007142665
  8.         StringBuilder sb1 = new StringBuilder("Hello,world!");  
  9.         StringBuilder sb2 = new StringBuilder(s1);  
  10.         System.out.println(sb1.hashCode());//1291383602
  11.         System.out.println(sb2.hashCode());//1814462232
  12.     }  
  13. }  

toString方法

在Object類中,它用於返回物件所屬類名和雜湊碼,例如
  1. package com.xujin;  
  2. publicclass Main{  
  3.     publicstaticvoid main(String...args){  
  4.         System.out.println(System.out);//[email protected]
  5.     }  
  6. }  

輸出的是一個[email protected],這是因為System.out所屬的PrintStream類並沒有覆蓋Object的toString方法。 而在大多數情況下,它用於返回表示物件值的字串。 絕大多數的toString方法都遵循這個格式: 類名[域值,域值,域值......] 如下例:
  1. package com.xujin;  
  2. publicclass Main{  
  3.     publicstaticvoid main(String...args){  
  4.         Employee staff = new Employee("Bob",8000);  
  5.         System.out.println(staff.toString());  
  6.     }  
  7. }  
  8. class Employee{  
  9.     public Employee(String name, double salary){  
  10.         this.name = name;         
  11.         this.salary = salary;         
  12.     }     
  13.     public String toString(){  
  14.         return getClass().getName() + "[name = " + name + ", salary = " + salary + "]";  
  15.     }  
  16.     //定義變數
  17.     privatedouble salary;  
  18.     private String name;  
  19. }  

輸出將是:com.xujin.Employee[name = Bob, salary = 8000.0] 其實,只要物件與一個字串通過操作符“+”連線起來,Java編譯就會自動的呼叫toString方法,以便獲得這個物件的字串描述。

相關推薦

JAVA-初步認識-第十一章-object-equals方法

行修改 color 我們 兩個 例子 初步 是我 地方法 成了 一. 接下來介紹一個特殊的對象,學完繼承,多態,將要講到的,之前也接觸過。 之前談論的繼承體系子父類中,一直存在super()調用父類,父類中也有一個super()調用object。現在就是討論object對

Object方法

interface 監視 object c except c++ t對象 reg code 重寫 在java中,Object類是所有類的超類,所有的類都繼承Object類中的方法。 Object類中有12個成員方法,並沒有顯示聲明任何構造方法,而是存在著默認的無參的構造函數

Objectclone方法徹底剖析

一、什麼是克隆 克隆就是依據已經有的資料,創造一份新的完全一樣的資料拷貝。 在Java中物件的克隆有深克隆和淺克隆之分。有這種區分的原因是Java中分為基本資料型別和引用資料型別,對於不同的資料型別在記憶體中的儲存的區域是不同的。基本資料型別儲存在棧中,引用資料型別儲存在堆中。

Objectclone方法深度解析

首先我們來看下clone方法的原始碼 protected native Object clone() throws CloneNotSupportedException; 通過原始碼可以發現幾點: clone方法是native方法,native方法的效率遠高於非native方法,

Java 中Object方法

Java是單根繼承結構語言,也就是說,Java中所有的類都有一個共同的祖先,這個祖先就是Object類。 如圖所示:Object類中的方法 說明:  1、hashCode和equals函式用來判斷物件是否相同,   ​ equals()用於確認

Object所有方法詳解——面試

工作後往往忽略一些基礎知識的複習,而在面試中常常被這些問題弄得抓耳撓腮,明明知道問題簡單卻就是回答不出來,小二在這也是感同身受,最近先整理幾篇基礎知識的博文共以後自己複習; 1.getClass public final Class<?> getC

Java中Object方法(toString方法和equals方法

Object是所有類的父類(國外成為超類superclass),Object類的方法是相當少的(理解為教室人越多,他們的共同點越少)。 一:toString方法 Object的toString()方法幫助我們返回一個字串,這個字串的格式是固定的:類名@hashcode。

Object方法——finalize()

Java中存在垃圾回收器負責回收無用物件佔用的記憶體資源,其實垃圾回收器只會回收由new關鍵字分配的記憶體空間,對於一些通過其他途徑(比如反射)建立物件而分配的記憶體空間垃圾回收器並不能進行回收。為了應對這種情況,允許在類中定義一個finalize方法,其基本原

Java(object方法簡介)

object 類介紹 java.lang.Object   java.lang包在使用的時候無需顯示匯入,編譯時由編譯器自動匯入。   Object類是類層次結構的根,Java中所有的類從根本上都繼承自這個類。   Object類是Java中唯一沒有父類

重寫objectequals方法(避免中出現重複的資料)

我們知道所有的物件都擁有標識(記憶體地址)和狀態(資料),同時“==”比較兩個物件的的記憶體地址,所以說使用Object的equals()方法是比較兩個物件的記憶體地址是否相等,即若object1.equals(object2)為true,則表示equals1和

【Java面試題】之Object方法詳解

之前看到有人分享的面經,面試官先問Object中有什麼方法,然後再要求解釋每一次方法的作用。 先看看Object中有什麼方法 Object類是Java中所有類的基類。位於java.lang包中,一共有13個方法 方法一 Object() 即Object的構造方法 大

Object常用方法equals和toString

spa 地址 表示 play style @+ 字符串 結果 rri Object類的常用方法 Object類是Java語言中的根類,即所有類的父類。它中描述的所有方法子類都可以使用。所有類在創建對象的時候,最終找的父類就是Object。 == 可以比較的數據類型:

AJPFX關於Java Object常用方法小總結

擁有 常用方法 false getclass sym ret sys eat equal java.lang.Object   java.lang包在使用的時候無需顯示導入,編譯時由編譯器自動導入。  Object類是類層次結構的根,Java中所有的類從根

Java中Object方法

Object類是所有類的父類,位於java.lang包中,陣列也是Object類的子類 方法有:equals、toString、

Object重要方法

Object是所有類的最終祖先。,可以使用Object類引用任何型別的物件。在Java中,只有基本型別不是物件。 Equals方法 Object類中的equals方法用於檢測一個物件是否等於另外一個物件。在Object類中,這個方法將判斷兩個物件是否具有相同的引用。 但是,我們一般意義上的相等不僅僅是

Object重要的幾個方法

1.Object和Object.toString()輸出是否相等? public class Demo1 {     public static void main(String[] args) {         Object o=new Object();

Object的常用方法及其說明

object object類 final 運行時 equal 不存在 order 監視 eight 方法名 方法描述 Object() 默認構造方法 clone() 創建並返回對象的一個副本 equals(Object obj) 指示某個其他對象是否與此對

Java:Object的equals()方法 如何編寫一個完美的equals()方法

urn day lan 匹配 另有 net 現在 isn tar 一 代碼實例: package freewill.objectequals; /** * @author freewill * @see Core Java page161 * @desc getClas

day4(繼承、修飾符、方法的重寫、super關鍵詞、繼承中的構造方法object、對象轉型)

編程 權限 數列 als str list 兩個 instance 變量 1.類的繼承(extends)通過繼承,子類自動擁有父類的所有成員(成員變量和成員發方法)一個子類只能有一個父類,一個父類可以派生多個子類 2.訪問修飾符(private 默認 protected

[ 轉載 ] Java基礎10--關於Object下所有方法的簡單解析

zed final關鍵字 pro target 解釋 temp cat turn syn 關於Object類下所有方法的簡單解析 類Object是類層次結構的根類,是每一個類的父類,所有的對象包括數組,String,Integer等包裝類,所以了解Object是很有必要