equals和==的區(qū)別小結(jié)

==

== 比較的是變量(棧)內(nèi)存中存放的對象的(堆)內(nèi)存地址,用來判斷兩個對象的地址是否相同,即是否是指相同一個對象叶圃。比較的是真正意義上的指針操作。

1践图、比較的是操作符兩端的操作數(shù)是否是同一個對象掺冠。
2、兩邊的操作數(shù)必須是同一類型的(可以是父子類之間)才能編譯通過码党。
3德崭、比較的是地址,如果是具體的阿拉伯?dāng)?shù)字的比較揖盘,值相等則為true眉厨,如:
int a=10 與 long b=10L 與 double c=10.0都是相同的(為true),因?yàn)樗麄兌贾赶虻刂窞?0的堆兽狭。


equals

equals用來比較的是兩個對象的內(nèi)容是否相等憾股,由于所有的類都是繼承自java.lang.Object類的,所以適用于所有對象箕慧,如果沒有對該方法進(jìn)行覆蓋的話服球,調(diào)用的仍然是Object類中的方法,而Object中的equals方法返回的卻是==的判斷销钝。

??String s="abcd"是一種非常特殊的形式,和new 有本質(zhì)的區(qū)別有咨。它是java中唯一不需要new 就可以產(chǎn)生對象的途徑琐簇。以String s="abcd";形式賦值在java中叫直接量,它是在常量池中而不是象new一樣放在壓縮堆中蒸健。這種形式的字符串,在JVM內(nèi)部發(fā)生字符串拘留婉商,即當(dāng)聲明這樣的一個字符串后似忧,JVM會在常量池中先查找有有沒有一個值為"abcd"的對象,如果有,就會把它賦給當(dāng)前引用.即原來那個引用和現(xiàn)在這個引用指點(diǎn)向了同一對象,如果沒有,則在常量池中新創(chuàng)建一個"abcd",下一次如果有String s1 = "abcd";又會將s1指向"abcd"這個對象,即以這形式聲明的字符串,只要值相等,任何多個引用都指向同一對象。
??而String s = new String("abcd");和其它任何對象一樣.每調(diào)用一次就產(chǎn)生一個對象丈秩,只要它們調(diào)用盯捌。
??也可以這么理解: String str = "hello"; 先在內(nèi)存中找是不是有"hello"這個對象,如果有,就讓str指向那個"hello".如果內(nèi)存里沒有"hello"蘑秽,就創(chuàng)建一個新的對象保存"hello". String str=new String ("hello") 就是不管內(nèi)存里是不是已經(jīng)有"hello"這個對象饺著,都新建一個對象保存"hello"。

public class test{
    public static void main(String[] args) {
        String a = new String("ab"); // a 為一個引用
        String b = new String("ab"); // b為另一個引用,對象的內(nèi)容一樣
        String aa = "ab"; // 放在常量池中
        String bb = "ab"; // 從常量池中查找
        if (aa == bb) // true
            System.out.println("aa==bb");
        if (a == b) // false肠牲,非同一對象
            System.out.println("a==b");
        if (a.equals(b)) // true,String重寫了equals方法幼衰,如果沒有重寫這里就是false,因?yàn)楸容^的實(shí)質(zhì)是在比較==
            System.out.println("aEQb");
        if (42 == 42.0) { // true
            System.out.println("true");
        }
    }
}

equals和==的區(qū)別

equals方法最初是在所有類的基類Object中進(jìn)行定義的缀雳,源碼是
public boolean equals(Object obj) {
return (this == obj);
}
  由equals的源碼可以看出這里定義的equals與==是等效的(Object類中的equals沒什么區(qū)別)渡嚣,不同的原因就在于有些類(像String、Integer等類)對equals進(jìn)行了重寫,但是沒有對equals進(jìn)行重寫的類(比如我們自己寫的類)就只能從Object類中繼承equals方法识椰,其equals方法與==就也是等效的绝葡,除非我們在此類中重寫equals。

對equals重新需要注意五點(diǎn):
1 自反性:對任意引用值X腹鹉,x.equals(x)的返回值一定為true藏畅;
2 對稱性:對于任何引用值x,y,當(dāng)且僅當(dāng)y.equals(x)返回值為true時,x.equals(y)的返回值一定為true种蘸;
3 傳遞性:如果x.equals(y)=true, y.equals(z)=true,則x.equals(z)=true 墓赴;
4 一致性:如果參與比較的對象沒任何改變,則對象比較的結(jié)果也不應(yīng)該有任何改變航瞭;
5 非空性:任何非空的引用值X诫硕,x.equals(null)的返回值一定為false 。

String類對equals的重寫如下:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刊侯,一起剝皮案震驚了整個濱河市章办,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滨彻,老刑警劉巖藕届,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亭饵,居然都是意外死亡休偶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門辜羊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踏兜,“玉大人,你說我怎么就攤上這事八秃〖钭保” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵昔驱,是天一觀的道長疹尾。 經(jīng)常有香客問我,道長骤肛,這世上最難降的妖魔是什么纳本? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮腋颠,結(jié)果婚禮上繁成,老公的妹妹穿的比我還像新娘。我一直安慰自己秕豫,他們只是感情好朴艰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布观蓄。 她就那樣靜靜地躺著,像睡著了一般祠墅。 火紅的嫁衣襯著肌膚如雪侮穿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天毁嗦,我揣著相機(jī)與錄音亲茅,去河邊找鬼。 笑死狗准,一個胖子當(dāng)著我的面吹牛克锣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腔长,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼袭祟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捞附?” 一聲冷哼從身側(cè)響起巾乳,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸟召,沒想到半個月后胆绊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欧募,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年压状,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跟继。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡种冬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出还栓,到底是詐尸還是另有隱情碌廓,我是刑警寧澤传轰,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布剩盒,位于F島的核電站,受9級特大地震影響慨蛙,放射性物質(zhì)發(fā)生泄漏辽聊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一期贫、第九天 我趴在偏房一處隱蔽的房頂上張望跟匆。 院中可真熱鬧,春花似錦通砍、人聲如沸玛臂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迹冤。三九已至讽营,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泡徙,已是汗流浹背橱鹏。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堪藐,地道東北人莉兰。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像礁竞,于是被迫代替她去往敵國和親糖荒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • ==: == 比較的是變量(棧)內(nèi)存中存放的對象的(堆)內(nèi)存地址模捂,用來判斷兩個對象的地址是否相同寂嘉,即是否是指相同一...
    CQ_TYL閱讀 280評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)枫绅,斷路器泉孩,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法坠七,類相關(guān)的語法碳锈,內(nèi)部類的語法,繼承相關(guān)的語法双揪,異常的語法县耽,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • “風(fēng)雪大了句喷,還走嗎?” “怎么不走兔毙?” 又是一陣風(fēng)肆意襲來唾琼,揚(yáng)起的雪迷了眼,他抬起紅腫的右手在臉上揩了一把澎剥,只覺得...
    Gxuer閱讀 495評論 0 0
  • 理財(cái)是一種很私人的感受哑姚,100個人心里就有100種對于財(cái)富的看法祭饭。而這套書只是一個話頭,一個方便叙量,一個讀后可忘的故...
    再生香的小書桌閱讀 2,240評論 22 111