精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

"一致性相等"的陷阱

開發 后端
方法equals()與Comparable接口中的compareTo()方法是Java中最基本的兩個方法之一,然而它們的定義卻圍繞著"與相等一致"這一有趣的概念。

關于Object類中的equals()方法與Comparable接口中的compareTo()方法之間有何種關聯,之前還真沒考慮過。通過java.net看到此文之后,收獲了一點兒新知識,希望大家也能如此。

方法equals()與Comparable接口中的compareTo()方法是Java中最基本的兩個方法之一,然而它們的定義卻圍繞著"與相等一致"這一有趣的概念。

equals()方法

Java中的equals()方法既明確,又模糊。Java清楚地定義了如何準確地檢驗一個equals()方法是可用的。一個恰當的equals()方法必須是自反的,對稱的,可傳遞的,一致的,并能處理null引用。

然而equals()方法又是不清晰的。Javadoc說到,該方法指定了其它對象是"等于"這個對象的。注意,"等于"是放在引號中的。此處的關鍵就是,它沒有定義如何去判定這種相等性。

·對象的一致性(==)默認是繼承自Object類

·對象的整體可觀測的狀態,例如,若兩個對象是相等的,那么在應用的其它部分可以用一個對象去替代另一個對象。

·對象信息中的某些部分,如ID,使得檢驗對象相等性在邏輯上是有意義的。

compareTo()方法

Comparable接口定義了可比較性的概念。Javadoc指出compareTo()方法"強制設定了每個實現了該接口的類的對象的全部順序"。

實現了Comparable接口的類有一個天然的排序,這可便于存儲,也能在不使用單獨的Comparator的情況下,用于像TreeSet和TreeMap這樣的集合對象。

該接口的定義明晰,它要求其實現必須確保對稱性與傳遞性,就像equals()方法那樣。

一致性/非一致性相等

Comparable接口有如下描述

類C的天然排序意味著要與equals()方法保持一致,只有當且僅當e1.compareTo(e2) == 0與e1.equals(e2)有相同的布爾值。

基本上,這就要求由compareTo()定義的相等性與equals()方法定義的相等性具有相同的概念(除去有null的情況)。乍一看,該要求很簡單,但實際上它有其復雜性,后面將會討論到。

當考慮到操作符重載時,這種定義就特別有用。若我們假設有一種類Java語言,在這種語言中,==并不表示對象的同一性,而是通過方法去進行比較,大于/小于操作符也是如此,問題是調什么樣的方法。在類Java語言中大于/小于天然地就要基于compareTo()方法,而==則要調用equals()方法。

  1. // our new Java-like language  
  2. if (a < b) return "Less";      // translation ignoring nulls: if (a.compareTo(b) < 0)  
  3. if (a > b) return "Greater";   // translation ignoring nulls: if (a.compareTo(b) > 0)  
  4. if (a == b) return "Equal";    // translation ignoring nulls: if (a.equals(b))  
  5. throw new Exception("Impossible assuming no nulls?"); 

但如果compareTo()方法不是"一致性相等",那么上述代碼將會拋出異常,因為當a.equals(b)為false時,a.compareTo(b)會返回0。

在集合,如TreeMap,中還會發生其它問題:

  1. // Foo class is "inconsistent with equals"  
  2. assert foo1.equals(foo2) == false;  
  3. assert foo1.compareTo(foo2) == 0;  
  4.    
  5. TreeMap<Foo, String> map =   
  6. map.put(foo1, "a");  
  7. map.put(foo2, "b"); 

當使用equals()方法時,這兩個對象不相等,但使用compareTo()時,它們卻相等。在這種情況下,該Map的元素個數將為1,而非0。

由于這些"一致性相等"的問題,Javadoc說道"強烈建議(盡管并不要求)天然排序規則要與equals()方法保持一致"。

JDK中的許多類為了符合"一致性相等"這一規范而實現了Comparable接口。這些類包括Byte,Short,Integer,Long,Character和String。

還有些更有趣的類:

BigDecimal--肯定是"非一致性相等",比如4.00與4.0不一致,但進行比較時,認為它們是一樣的。

Double/Float--該類顯式地提供了排序規則,并為正零和負零,以及NaN都提供了相等性檢查,以確保它的compareTo()方法符合"一致性相等"。

CharSet--該類基于ID或名稱。equals()方法對待字段串是大小寫敏感的,但compareTo()方法卻不這樣。雖然名稱一般會符合某種標準,但這是一種值得懷疑的"一致性"。

*Buffer(nio)--該簇類的比較基于緩沖存放的內容,在我的測試中equals()和compareTo()是"一致的"。

Rdn(ldap)--該類的比較基于狀態的標準化格式,因此也是"一致性相等"。

ObjectStreamField(序列化)--該類的比較基于名稱,但會首先對基本數據類型進行排序。因為沒有覆蓋equals()方法,所以是"非一致性相等"。

 ...

注意:對于大多數的例子,我都不得不查看其源代碼或編寫測試程序以確定該類是不是符合"一致性相等"。這兒有一個不錯地清理Javadoc和檢驗UUID equals()方法的Adopt-a-JDK任務。

JSR-310

一直看到許多關于BigDecimal的問題,已有計劃將JSR-310中的類改造成"一致性相等",最近的一些帖子顯示這將造成多么大的爭議。

基本上,為某些類定義equals()和compareTo()看起來很容易。LocalDate表示某單一日歷系統中的某個日期,所以它有一個顯而易見的排序算法和相等規則。LocalTime則表示某個時刻,所以它也有一個明顯的排序算法和相等規則。Instant表示時間線上的某個時刻,那么它的排序與相等也是顯見的。

但在其它的情況下,這就不是那么顯而易見了。考慮這樣一個類OffsetDateTime:

  1. dt1 = OffsetDateTime.parse("2012-11-05T06:00+01:00");  
  2. dt2 = OffsetDateTime.parse("2012-11-05T07:00+02:00"); 

這樣的兩個日期-時刻對象代表時間線上一個相同的時刻點,但它們有不同的本地時,而且相對的UTC/格林威治時間的偏移量也不相同。

那么就有一個問題要留給讀者們...你更傾向于如下哪種觀點...

1. dt1不等于dt2,compareTo()分別比較本地時與偏移量,使用"一致性相等"(使用獨立的Comparator基于時刻對其進行排序)。

2. dt1不等于dt2,compareTo()基于時間線的上時刻點,使用"非一致性相等"。

3. dt1等于dt2,compareTo()基于時間線的上時刻點,使用"一致性相等"。

4. dt1等于dt2,且不實現Comparable接口。

5. dt1不等于dt2,且不實現Comparable接口。

我個人更傾向于讓dt1.equals(dt2)返回true這種方案,但我仍持開放態度。

順便地,也可以將這個問題提給BigDecimal,如果你能修改這個類,使其符合"一致性相等",你會修改它的equals()方法,還是compareTo()方法?

原文鏈接:http://www.blogjava.net/jiangshachina/archive/2012/12/06/392569.html

責任編輯:張偉 來源: blogjava
相關推薦

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2022-12-14 08:23:30

2025-09-08 07:25:16

2021-02-05 08:00:48

哈希算法?機器

2021-02-02 12:40:50

哈希算法數據

2021-07-26 06:33:42

CRDT數據CAP

2021-06-22 10:22:08

業務IT一致性首席信息官

2025-10-14 09:22:48

2020-05-12 10:43:22

Redis緩存數據庫

2020-11-24 09:03:41

一致性MySQLMVCC

2024-04-11 13:45:14

Redis數據庫緩存

2021-06-30 21:13:49

CPUCache數據

2022-03-22 09:54:22

Hash算法

2022-10-19 12:22:53

并發扣款一致性

2019-08-30 12:46:10

并發扣款查詢SQL

2020-04-01 15:50:17

TiDBMySQL數據庫

2020-08-05 08:46:10

NFS網絡文件系統

2021-02-04 06:30:26

Python編程語言

2025-03-27 08:20:54

2021-05-19 21:50:46

Hash算法測試
點贊
收藏

51CTO技術棧公眾號

青青青伊人色综合久久| 无码人中文字幕| 中文字幕在线视频区| 久久精品国产网站| 欧美激情亚洲国产| 亚洲成av人片一区二区三区| 18视频在线观看| 你懂的一区二区三区| 欧洲国内综合视频| 国产 国语对白 露脸 | 欧美aa一级| 国产精品91久久| 精品国产一区二区三区久久久狼| 日本不卡一区在线| gogo高清在线播放免费| 中文字幕欧美日本乱码一线二线 | 666欧美在线视频| 久久99精品久久久久久久青青日本| 国产精品午夜一区二区| 欧美日韩国产一区精品一区| 亚洲视频欧洲视频| 国产精品99久久久精品无码| 欧美xnxx| 天天综合日日夜夜精品| 亚洲欧洲精品在线| 日韩偷拍自拍| 丁香婷婷综合五月| 国产日韩欧美夫妻视频在线观看 | 狠狠躁夜夜躁久久躁别揉| 日本精品一区二区三区视频| 欧美自拍偷拍第一页| 精品制服美女久久| 国产精品久久久久久久久久久久| 精品少妇一二三区| 99精品综合| 自拍偷拍亚洲欧美| 91网站免费入口| 久久久久观看| 亚洲高清一区二| 国产chinesehd精品露脸| 青青青国产精品| 欧美性生活一区| 黑鬼大战白妞高潮喷白浆| 波多野在线观看| 一区二区三区视频在线看| 亚洲亚洲精品三区日韩精品在线视频| 猫咪在线永久网站| 91亚洲精品久久久蜜桃| 国内外成人免费视频| 俄罗斯嫩小性bbwbbw| 国产99久久久国产精品免费看| 92裸体在线视频网站| 国产精品无码天天爽视频| 美女脱光内衣内裤视频久久影院| 国产精品久久久久不卡| 日本一本在线观看| 欧美调教在线| 天堂av一区| 伊人一区二区三区| 成人高清dvd| 欧美亚洲系列| 亚洲制服丝袜在线| 国产免费黄色一级片| 国产蜜臀av在线播放| 亚洲图片欧美综合| 天天夜碰日日摸日日澡性色av| 黄色漫画在线免费看| 狠狠色狠狠色综合日日小说| 无码人妻丰满熟妇区毛片| 日韩天堂在线| 欧美精品欧美精品系列| 在线观看一区二区三区视频| 视频一区日韩精品| 亚洲精品黄网在线观看| 性久久久久久久久久| 日本久久综合| 欧美成人高清视频| 日本视频免费在线| 日韩av一级电影| 成人精品一区二区三区| www.久久综合| 91小视频免费看| 相泽南亚洲一区二区在线播放| 免费在线观看av| 亚洲综合激情网| 成人黄色片视频| 日韩成人在线一区| 亚洲福利精品在线| 在线观看免费小视频| 影音先锋成人在线电影| 97视频com| 欧美视频xxxx| 床上的激情91.| 日韩三级电影免费观看| 91精品久久久| 色哟哟国产精品免费观看| www.com操| 国产精品香蕉| 中文字幕亚洲欧美日韩在线不卡| 免费一级肉体全黄毛片| 久久精品亚洲一区二区| 亚洲自拍偷拍一区| 精品乱码一区二区三四区视频| 日韩一区欧美一区| 国产在线精品91| 曰本一区二区| 亚洲欧美国产精品专区久久 | 亚洲国产精品一| 国产欧美一区二区精品秋霞影院| 日本免费a视频| 亚洲电影有码| 亚洲国产97在线精品一区| 影音先锋男人资源在线观看| 亚洲免费黄色| 91亚洲国产成人久久精品网站| 色播色播色播色播色播在线| 亚洲免费毛片网站| 性猛交ⅹ×××乱大交| 狼人天天伊人久久| 九九热精品视频在线播放| 亚洲午夜无码久久久久| 99re8在线精品视频免费播放| 国产日韩欧美大片| 激情欧美一区二区三区黑长吊| 日韩电影免费观看中文字幕| 亚洲国产精品久| 久久av资源网| 午夜欧美性电影| 最新中文字幕在线播放| 亚洲国产欧美一区| 久久香蕉精品视频| 国产精品原创巨作av| 杨幂一区欧美专区| 四虎4545www国产精品| 日韩电影大片中文字幕| 国产一区二区三区影院| 成人网在线播放| 欧美黄色免费网址| 麻豆精品在线| 欧美成人精品在线观看| 亚洲一级视频在线观看| 中文字幕一区二区在线播放| 色多多视频在线播放| 欧美美女一区| 国产精品极品尤物在线观看 | 国产丝袜欧美中文另类| 国产综合av在线| 美女视频免费精品| 97**国产露脸精品国产| 日本黄视频在线观看| 午夜久久久久久久久| 国产精品一区二区人妻喷水| 91久久亚洲| 国产偷国产偷亚洲高清97cao| 男女在线视频| 亚洲第一男人天堂| 国产毛片aaa| 久久只精品国产| av五月天在线| 99热在线成人| 成人黄视频免费| а√天堂8资源中文在线| 日韩av在线免费观看一区| www欧美在线| 国产欧美综合色| 久久久久国产一区| 天天做综合网| 国产精品一区在线播放| 欧美天堂视频| 日韩中文理论片| 91黄色在线视频| 亚洲国产日韩a在线播放| 成人区人妻精品一区二| 亚洲免费婷婷| 亚洲资源在线网| 福利在线一区| 国产成人精品亚洲精品| 免费在线看黄色| 亚洲第一免费网站| 中文字幕永久免费视频| 中文字幕一区二区三区视频| 无码人妻精品一区二区三| 香蕉精品999视频一区二区| 午夜免费电影一区在线观看| 精品一区二区三区中文字幕| 91高清在线免费观看| yiren22亚洲综合伊人22| 日韩一级大片在线观看| 99精品视频99| 亚洲欧美在线视频观看| 国产在线不卡av| 美腿丝袜一区二区三区| 欧美黑人在线观看| 清纯唯美亚洲综合一区| 国产伦精品一区二区三区照片91| av免费在线一区| 欧美国产一区二区三区| 福利在线观看| 亚洲电影免费观看高清完整版在线| 五月婷婷六月婷婷| 夜夜爽夜夜爽精品视频| 国产一区二区三区四区在线| 成人三级在线视频| 污污网站免费看| 夜夜爽av福利精品导航| 精品一区二区成人免费视频| 免费看成人哺乳视频网站| 2014国产精品| 韩日一区二区| 7777kkkk成人观看| gogogogo高清视频在线| 在线观看精品国产视频| 天堂在线视频免费观看| 欧美一区二区三区日韩| 五月激情丁香网| 黑人巨大精品欧美一区二区| 永久久久久久久| 中文字幕第一页久久| 国产ts丝袜人妖系列视频| 国产美女一区二区| 国产精品嫩草影院8vv8| 久久天堂成人| 成人中文字幕在线播放| 伊人天天综合| 国产性生活免费视频| 久久人体视频| 深夜福利成人| 亚洲最好看的视频| 精品日韩欧美| 国产成人精品福利| 97超碰人人看人人| 亚洲成人影音| 91精品免费| av日韩一区| 91亚洲精品视频| 香蕉久久久久久| 成人福利在线视频| 婷婷激情成人| 成人精品久久一区二区三区| 欧美91在线|欧美| 国产在线精品一区免费香蕉| 福利一区视频| 国产精品丝袜久久久久久高清| 欧美精品高清| 国产精品丝袜白浆摸在线| 精品视频在线一区二区在线| 国产精品高清在线| 国产精品videossex撒尿| 国产精品久久久久久久av大片| 午夜av成人| 成人精品网站在线观看| 在线不卡一区| 丁香五月网久久综合| 成人影院中文字幕| 久久精品日韩| 久久91麻豆精品一区| 日韩欧美在线电影| 五月天久久777| 日本精品免费视频| 亚洲一级电影| 黄色片一级视频| 麻豆成人av在线| 加勒比av中文字幕| 国产成人免费视频网站| 午夜男人的天堂| 久久精品免视看| www.黄色com| 亚洲国产视频一区| 在线天堂中文字幕| 欧美三级中文字幕在线观看| 91亚洲国产成人久久精品麻豆| 欧美一级一区二区| 欧美 日韩 国产 精品| 日韩激情av在线播放| a视频网址在线观看| 免费成人高清视频| а√天堂8资源在线| 国产精品网站视频| 伊人久久大香线蕉av超碰| 久久久久久久久一区二区| 精品国产一区一区二区三亚瑟| 欧美少妇一级片| 亚洲一本视频| 日日噜噜夜夜狠狠| 波多野结衣中文一区| 久久久视频6r| 一区二区高清免费观看影视大全| 青草视频在线观看免费| 欧美肥胖老妇做爰| 亚洲 欧美 激情 另类| 深夜福利91大全| 日本不卡1234视频| 成人精品网站在线观看| 亚洲精品亚洲人成在线| 亚洲成人动漫在线| 久久不射中文字幕| 久久发布国产伦子伦精品| 91在线高清观看| 波多野结衣爱爱视频| 日本韩国欧美国产| 亚洲精品一区二区口爆| 最新的欧美黄色| 岛国在线视频网站| 亚洲xxxxx电影| 国产一区二区三区网| 男女日批视频在线观看| 久久99热狠狠色一区二区| v天堂中文在线| 亚洲美女免费在线| 日韩国产亚洲欧美| 亚洲精品白浆高清久久久久久| 麻豆传媒视频在线观看| 国产福利视频一区| 精品亚洲精品| 日韩精品第1页| 久久99精品久久久久久| 亚洲精品色午夜无码专区日韩| 亚洲电影第三页| jlzzjlzz亚洲女人18| 日韩视频在线免费观看| 亚洲成人短视频| 九九九九精品九九九九| 欧美日韩爆操| 制服下的诱惑暮生| 亚洲欧洲av色图| 一级黄色大毛片| 在线播放精品一区二区三区| 中文字幕色婷婷在线视频| 国产精品一区二区三区免费观看| 欧美人成网站| 黄页免费在线观看视频| www.国产麻豆| 亚洲h色精品| 蜜臀久久99精品久久久久久宅男| 自拍网站在线观看| 开心色怡人综合网站| 99av国产精品欲麻豆| 性活交片大全免费看| 一级日本不卡的影视| 性欧美videos另类hd| 欧美成人免费在线视频| 精品视频在线观看免费观看| 亚洲一区二区在线看| 麻豆精品一区二区综合av| 极品尤物一区二区| 欧美视频日韩视频在线观看| 高清福利在线观看| 国产精品视频久久久久| 成人写真视频| 国产欧美激情视频| 国产精品成人免费在线| 国产毛片久久久久| 欧美麻豆久久久久久中文| 亚洲精品一区在线| 成人在线观看你懂的| 97国产精品videossex| 狠狠人妻久久久久久| 一区二区三区四区视频| 成人国产激情在线| 黄色网zhan| 成人黄色777网| 丁香六月婷婷综合| 在线观看国产欧美| 精品视频一区二区三区| 精品少妇人妻av免费久久洗澡| 91视频一区二区三区| 五十路六十路七十路熟婆| 日韩精品一二三| 亚洲天堂av中文字幕| 欧美精品第1页| 后进极品白嫩翘臀在线播放| 精品不卡在线| 日韩国产精品久久| 久久中文免费视频| 亚洲第一在线视频| 日韩精品免费观看视频| 一区二区三区四区视频在线观看| 国产一区二区三区黄视频 | 中国特级黄色片| 精品电影在线观看| 中文字幕在线观看日本| 懂色中文一区二区三区在线视频| 国产伦理一区| 青青操在线视频观看| 亚洲成成品网站| av成人亚洲| 青青青在线观看视频| 久久久久久久久久久久久女国产乱 | 一本久久a久久精品亚洲| 蜜桃视频在线观看www社区| 亚洲伊人久久大香线蕉av| 亚洲一区二区伦理| 日本精品在线免费观看| 日韩国产一区三区| 日韩一级特黄| 免费av观看网址| 亚洲人成精品久久久久| 亚洲色欧美另类| av成人免费观看| 蜜臀av性久久久久av蜜臀妖精|