1. 程式人生 > >對於所有物件都通用的方法(equals)

對於所有物件都通用的方法(equals)

1.在改寫equals的時候請遵守通用約定。
1)一個類的每個例項本質上都是惟一的。
2)不關心一個類是否提供了“邏輯相等”的測試功能。
3)超類改寫了equals,從超類繼承過來的行為對於子類也是合適的。

public class CaseInsentiveString {
private String s;

public CaseInsentiveString(String s) {
this.s = s;
}

@Override
public boolean equals(Object o) {
return o instanceof CaseInsentiveString&&s.equalsIgnoreCase(((CaseInsentiveString)o).s);
}
public static void main(String []args){
CaseInsentiveString cis=new CaseInsentiveString("HelloWorld");
CaseInsentiveString cis2=new CaseInsentiveString("Helloworld");
String str="HelloWorld";
System.out.println(cis.equals(str)); //false
System.out.println(cis.equals(cis2));//true
}

}

相關推薦

對於所有物件通用方法equals

1.在改寫equals的時候請遵守通用約定。 1)一個類的每個例項本質上都是惟一的。 2)不關心一個類是否提供了“邏輯相等”的測試功能。 3)超類改寫了equals,從超類繼承過來的行為對於子類也是合適的。public class CaseInsentiveString

Effective Java學習筆記對於所有物件通用方法

Object是一個具體類,但是設計他主要是為了擴充套件,他所有的非final方法(equals,toString,hashCode,clone,finalize)都是要被覆蓋的,並且任何一個類覆蓋非final方法時都要遵守通用原則,以便其他遵守這些預定的類能夠一同運作,

【讀書筆記】《Effective Java》2--對於所有物件通用方法

又讀了一章,之前一直覺得Java的體系很完善了,讀了這一章,發現原來Java平臺本身也有一些設計不周到的地方,而且有些地方因為已經成為公開API的一部分還不好改,相信繼續讀下去對Java的瞭解會更深一步的。 昨天下載了VS Code,嘗試了一下,感覺比subl

9. 【對於所有物件通用方法】重寫equals方法時一定也要重寫hashCode方法

本文是《Effective Java》讀書筆記第9條,其中內容可能會結合實際應用情況或參考其他資料進行補充或調整。 在每個覆蓋了equals方法的類中,一定也要覆蓋hasCode方法。否則會導致該類無法結合所有基於雜湊的集合(比如HashMap、HashS

Effective Java 總結 對於所有物件通用方法

在改寫equals的時候請遵守通用約定 不改寫equals方法時,每個例項只與自身相等,如果滿足一下任意一個條件,則不需要改寫equals方法: 一個類的例項本質上都是唯一的 不關心類是否支援“邏輯相等”功能 超類已經改寫了equals方法 類是私有的,並且可以確定

effective java中文版第三章 對於所有物件通用方法

道一聲坑爹。。。。上週末剛把這章整理了。。。忘了儲存了。。。迫於強迫症。。。。不得不再寫一遍。。但是也一帶而過。。。。只是為了哥的強迫症 第8條 覆蓋equals時請遵守通用約定 1,自反性 2,對稱性 3,傳遞性 第9條 覆蓋equals時總要覆蓋hashCode(這條重點記住)

【Effective java 學習】第三章:對於所有物件通用方法

第八條:覆蓋equals是請遵守通用約定 滿足下列四個條件之一,就不需要覆蓋equals方法: 類的每個例項本質上都已唯一的。不包括代表值的類,如:Integer,String等,Object提供的equals方法就夠用了 不關心是否提供了“邏輯相等”的測試功能。對

effective java-讀書筆記-第三章 對於所有物件通用方法

第三章 對於所有物件都通用的方法 所有非final方法(equals、hashCode、toString、clone、finalize)都有明確的通用約定,因為它們被設計成是要被覆蓋的,如果不遵守,基於雜湊的集合(HashMap、HashSet、HashTable)可

Effective java筆記-對於所有物件通用方法

對於所有物件都通用的方法 第8條 覆蓋equals時請遵守通用約定 滿足以下任何一個條件,可以不覆蓋equals: 類的每個例項本質上都是唯一的。(如Thread) 不關心是否提供了“邏輯相等”的測試功能(如Random) 超類已經覆蓋了equals,從

對於所有物件通用方法

8.覆蓋equals時請遵守通用規定 需要滿足的條件:  類的每個例項本質上都是唯一的。 不關心類是否提供了“邏輯相等(logical equality)”的測試功能。 超類已經覆蓋了equals,從超類繼承過來的行為對於子類也是合適的。 類是私有的或是包級私有的,可以確

2、對於所有物件通用方法

Object的設計主要是為了擴充套件。它的非final方法(equals、hashCode、toString、clone、finalize)都有明確的通用約定(general contract)。任何一個類覆蓋這些方法都有責任遵守這些約定。 覆蓋equal

《Effective Java》第3章 對於所有物件通用方法

Object類預設為所有類的基類,其雖然為一個具體的類,但是它的設計主要是為了擴充套件,而它的所有非final的方法(equals, hashCode, toString, clone和finalize)都有明確的通用約定, 如果在自定義類時要重寫這些方法,需要注意主動遵守

《Effective Java》第二章 對於所有物件通用方法

接下來繼續講第二章,第8-12條。第8條:覆蓋equals時請遵守通用約定equals 時Object類的一個非final方法,一般是表示類的例項物件是否相同,也就是物件的地址是否相等。但是某些時候卻要重寫Object.equals方法。即類需要有“邏輯相等”,也就是值類,這

《Effective Java》:對於所有物件通用方法

本系列皆為讀書筆記,“好記性不如爛筆頭”,勤看,也要勤記錄。此篇讀書筆記來自《Effective Java》。儘管Object是一個具體類,但設計它主要是為了擴充套件。它所有的非final方法都有明確的通用規定。任何一個類,在覆蓋這些方法的時候,都有責任去遵守這些通用規定,如

Effective Java讀書筆記 -- 第三章:對於所有物件通用方法

儘管Object是一個具體類,但是設計Object類主要是為了擴充套件。它的所有非final方法(equals、hashCode、toString、clone和finalize)都有明確的通用約定,因為它們就是被設計成要被覆蓋的。第八條:覆蓋equals時請遵守通用約定   

Java高階系列——使用所有物件通用方法

一、介紹 通過如何建立和銷燬物件一文,我們已經知道Java是一個面向物件的程式語言,Java類層次結構的頂部是Object類,Java中每個單獨的類都隱式的繼承於該類。因此,所有的類都繼承了在Object類中定義的一系列方法,這其中的一些非常重要的方法如下:

ES6 Promise物件之例項方法2

ES6 Promise物件之例項方法(2) 上一篇關於Promise的文章介紹了Promise的基本用法,這一篇繼續上一篇,介紹Promise的各種方法: (1)Promise.prototype.then() then方法是定義在原型物件Promise.prototype上的。

JavaScript基礎函式和詞法分析以及常用的內建物件和使用方法4

day52 參考:https://www.cnblogs.com/liwenzhou/p/8004649.html 函式 函式定義 JavaScript中的函式和Python中的非常類似,只是定義方式有點區別。 function foo(a, b) { console.log("a:"

Effective Java:對於所有物件通用方法

Java中所有的類都預設繼承Object類,而Object的設計主要是為了擴充套件。它的所有的非final方法(equals、hashCode、toString、clone和finalize)都有明確的通用約定(general contract),因為它們被設計

java多執行緒3:關鍵字synchronized取得的鎖物件鎖,而不是把一段程式碼或者方法函式當作鎖

java多執行緒3:關鍵字synchronized取得的鎖都是物件鎖,而不是把一段程式碼或者方法(函式)當作鎖 a.當多個執行緒訪問同一個物件的時候,哪個執行緒先執行帶synchronized關鍵字的方法,哪個執行緒就該方法所屬物件的鎖Lock,那麼其他物件就智慧呈等待狀態。但是如果多個執行緒訪