JDK1.9-經常使用類Object

1.1 概述

java.lang.Object類是Java語言中的根類,即全部類的父類。它中描述的全部方法子類均可以使用。在對象實例化的時候,最終找的父類就是Object。java

若是一個類沒有特別指定父類, 那麼默認則繼承自Object類。例如:web

public class MyClass /*extends Object*/ { 
 
   
  	// ...
}

根據JDK源代碼及Object類的API文檔,Object類當中包含的方法有11個。今天咱們主要學習其中的2個:安全

  • public String toString():返回該對象的字符串表示。
  • public boolean equals(Object obj):指示其餘某個對象是否與此對象「相等」。

1.2 toString方法

方法摘要

  • public String toString():返回該對象的字符串表示。

toString方法返回該對象的字符串表示,其實該字符串內容就是對象的類型+@+內存地址值。ide

因爲toString方法返回的結果是內存地址,而在開發中,常常須要按照對象的屬性獲得相應的字符串表現形式,所以也須要重寫它。svg

覆蓋重寫

若是不但願使用toString方法的默認行爲,則能夠對它進行覆蓋重寫。例如自定義的Person類:工具

public class Person { 
 
     
    private String name;
    private int age;

    @Override
    public String toString() { 
 
   
        return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
    }

    // 省略構造器與Getter Setter
}

在IntelliJ IDEA中,能夠點擊Code菜單中的Generate...,也可使用快捷鍵alt+insert,點擊toString()選項。選擇須要包含的成員變量並肯定。以下圖所示:學習

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NaNkzivx-1574999491678)(img\toString方法的自動重寫.bmp)]優化

小貼士: 在咱們直接使用輸出語句輸出對象名的時候,其實經過該對象調用了其toString()方法。this

1.3 equals方法

方法摘要

  • public boolean equals(Object obj):指示其餘某個對象是否與此對象「相等」。

調用成員方法equals並指定參數爲另外一個對象,則能夠判斷這兩個對象是不是相同的。這裏的「相同」有默認和自定義兩種方式。spa

默認地址比較

若是沒有覆蓋重寫equals方法,那麼Object類中默認進行==運算符的對象地址比較,只要不是同一個對象,結果必然爲false。

對象內容比較

若是但願進行對象的內容比較,即全部或指定的部分紅員變量相同就斷定兩個對象相同,則能夠覆蓋重寫equals方法。例如:

import java.util.Objects;

public class Person { 
 
   	
	private String name;
	private int age;
	
    @Override
    public boolean equals(Object o) { 
 
   
        // 若是對象地址同樣,則認爲相同
        if (this == o)
            return true;
        // 若是參數爲空,或者類型信息不同,則認爲不一樣
        if (o == null || getClass() != o.getClass())
            return false;
        // 轉換爲當前類型
        Person person = (Person) o;
        // 要求基本類型相等,而且將引用類型交給java.util.Objects類的equals靜態方法取用結果
        return age == person.age && Objects.equals(name, person.name);
    }
}

這段代碼充分考慮了對象爲空、類型一致等問題,但方法內容並不惟一。大多數IDE均可以自動生成equals方法的代碼內容。在IntelliJ IDEA中,可使用Code菜單中的Generate…選項,也可使用快捷鍵alt+insert,並選擇equals() and hashCode()進行自動代碼生成。

tips:Object類當中的hashCode等其餘方法,從此學習。

1.4 Objects類

在剛纔IDEA自動重寫equals代碼中,使用到了java.util.Objects類,那麼這個類是什麼呢?

JDK7添加了一個Objects工具類,它提供了一些方法來操做對象,它由一些靜態的實用方法組成,這些方法是null-save(空指針安全的)或null-tolerant(容忍空指針的),用於計算對象的hashcode、返回對象的字符串表示形式、比較兩個對象。

在比較兩個對象的時候,Object的equals方法容易拋出空指針異常,而Objects類中的equals方法就優化了這個問題。方法以下:

  • public static boolean equals(Object a, Object b):判斷兩個對象是否相等。

咱們能夠查看一下源碼,學習一下:

public static boolean equals(Object a, Object b) { 
 
     
    return (a == b) || (a != null && a.equals(b));  
}

本文同步分享在 博客「cwl_java」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索