目錄
1 同一性比較
2 相等性比較
3 需要比較對象之間的大小關系
3.1 Comparable接口比較(兩個對象)
3.1.1 已經實作了Comparable接口的類(例如下面的String類)
3.1.2 自己定義類并實作Comparable接口
3.1.3 正确的重寫compareTo方法
3.1.4 小結
3.2 Comparator接口(比較器)比較(三個對象)
3.2.1 使用要求
3.2.2 compare方法的重寫
3.2.3 正确的調用compare方法(需要三個對象(引用))
4 Comparator的使用場景
5 三種比較方式小結
1 同一性比較
對象的引用使用 == 比較的是同一性,即位址是否相同
1)引用1 == 引用2,表示兩個引用指向同一個對象
2)特例,引用1 == 引用2 == null 表示兩個引用不指向任何對象
2 相等性比較
使用equals方法進行比較,前提是該對象類重寫了equals方法,否則會調Object的equals方法還是比較的同一性
例如String類的比較,str1.equals(str2),如果傳回值為true表示兩種内容相等(str1 == str2 是一種特殊的相等性情況)
3 需要比較對象之間的大小關系
Java語言有一個規範,要求類實作Comparable或Comparator接口,接口繼承Comparable或Comparator接口才具備可比較的能力。
3.1 Comparable接口比較(兩個對象)
3.1.1 已經實作了Comparable接口的類(例如下面的String類)
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
至于下面的compareTo方法傳回值是什麼,代表什麼含義,讀者請自行檢視方法源碼
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
3.1.2 自己定義類并實作Comparable接口
定義一個Class類實作Comparable接口具備了比較能力,并且正确的重寫了compareTo方法,其中泛型中的Person表示compareTo方法傳入的對象時Person類。
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
我們自定義的比較大小的規則為:哪個Person類的level屬性值大就代表哪個對象大
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
3.1.3 正确的重寫compareTo方法
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
3.1.4 小結
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
3.2 Comparator接口(比較器)比較(三個對象)
3.2.1 使用要求
要比較的兩個對象是同一個類
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
3.2.2 compare方法的重寫
用到第三個類去實作Comparator接口并重寫compare方法
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
3.2.3 正确的調用compare方法(需要三個對象(引用))
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
4 Comparator的使用場景
1) 要比較的兩個對象類,不具備自然順序,即沒實作Comparable接口
2) 要比較的兩個對象具備自然順序,但這個順序不符合我們的比較要求
以下給出第二種情況的例子
如下例我們想要的結果是甲 < 乙,但是String類雖然實作了Comparable接口(有了自然順序),但是不符合我們的比較要求
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
是以我們定義一個額外的類去實作Comparator接口
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結
5 三種比較方式小結
![]()
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景 5 三種比較方式小結