日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

《Java 核心技术卷1 第10版》学习笔记------Object类的 equals 方法

發布時間:2024/9/30 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Java 核心技术卷1 第10版》学习笔记------Object类的 equals 方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Object 簡述

Object 類是 Java 中所有類的始祖, 在 Java 中每個類都是由它擴展而來的。

在 Java 中, 只有基本類型 ( primitive types) 不是對象, 例如,數值、 字符和布爾類型的值都不是對象。

所有的數組類塱,不管是對象數組還是基本類型的數組都擴展了 Object 類。

equals 方法

Object 類是 Java 中所有類的始祖, 在 Java 中每個類都是由它擴展而來的。
?

// Object 中的 equals 方法 public boolean equals(Object obj) {return (this == obj); }

1 Java 語言規范要求 equals 方法具有下面的特性:


? ? 1 ) 自反性: 對于任何非空引用 x, x.equals(x)?應該返回 true。
? ? 2 ) 對稱性: 對于任何引用 x 和 y, 當且僅當 y.equals(x) 返回 true, x.equals(y) 也應該返回 true。
? ? 3 ) 傳遞性: 對于任何引用 x、 y 和 z, 如果 x.equals(y) 返 N true, y.equals(z) 返回 true,x.equals(z) 也應該返回 true。
? ? 4 ) 一致性: 如果 x 和 y 引用的對象沒有發生變化,反復調用 x.eqimIS(y) 應該返回同樣的結果。
? ? 5 ) 對于任意非空引用 x, x.equals(null) 應該返回 false,


2 使用 Class 還是使用 instanceof ?

? ?如果子類能夠擁有自己的相等概念, 則對稱性需求將強制采用 getClass 進行檢測。

? ?如果由超類決定相等的概念,那么就可以使用 imtanceof進行檢測, 這樣可以在不同子類的對象之間進行相等的比較。
?

3 編寫一個完美的 equals 方法的建議:


1 ) 顯式參數命名為 otherObject, 稍后需要將它轉換成另一個叫做 other 的變量。

2 ) 檢測 this 與 otherObject 是否引用同一個對象:

?if (this = otherObject) return true;

這條語句只是一個優化。實際上,這是一種經常采用的形式。因為計算這個等式要比一個一個地比較類中的域所付出的代價小得多。

3 ) 檢測 otherObject 是否為 null, 如 果 為 null, 返 回 false。這項檢測是很必要的。

if (otherObject = null) return false;

4 ) 比較 this 與 otherObject 是否屬于同一個類。如果 equals 的語義在每個子類中有所改變,就使用 getClass 檢測:

if (getClass() != otherObject.getCIassO) return false;

如果所有的子類都擁有統一的語義,就使用 instanceof 檢測:

if (!(otherObject instanceof ClassName)) return false;

5 ) 將 otherObject 轉換為相應的類類型變量:

ClassName other = (ClassName) otherObject

6 ) 現在開始對所有需要比較的域進行比較了。使用= 比較基本類型域,使用 equals 比較對象域。如果所有的域都匹配, 就返回 true; 否 則 返 回 false。

return fieldl == other.field && Objects.equa1s(fie1d2, other.field2)

如果在子類中重新定義 equals, 就要在其中包含調用 super.equals(other。)

提示:對于數組類型的域, 可以使用靜態的 Arrays.equals 方法檢測相應的數組元素是否相等

4 擴展:

java.util.Arrays
? ? ? static Boolean equals(type[] a , type[] b) 5.0
? ? 如果兩個數組長度相同, 并且在對應的位置上數據元素也均相同, 將返回 true。 數組的元素類型可以是 Object、 int、 long、 short、 char、 byte、 boolean、 float 或 double 。
java.util.Objects
? ? ? static boolean equals(Object a, Object b)
? ? 如果 a 和 b 都為 null, 返回 true ; 如果只有其中之一為 null, 則返回 false ; 否 則 返 回a.equals(b)。

5 Demo:

public class Employee{...punlic boolean equals(Object otherObject){// 1. 引用檢測if(this == otherObject) return true;// 2. 檢測參數 otherObject 是否為空if(otherObject == null) return false;// 3. 比較 this 與 otherObject 是否為同一類if(getClass() != otherObject.getClass()) return false;// 4. 將 otherObject 轉換為相應的類型變量Employee other = (Employee) otherObject;// 5. 最后進行所有的域的比較return Objects.equals(name, other.name) && salary == other.salary && Objects.equals(hireDay, other.hireDay);}... }

?

總結

以上是生活随笔為你收集整理的《Java 核心技术卷1 第10版》学习笔记------Object类的 equals 方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。