成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

夯實(shí)基礎(chǔ)-java equals使用,和 == 的區(qū)別

ixlei / 962人閱讀

摘要:在這些類當(dāng)中有其自身的實(shí)現(xiàn)一般都是用來比較對象的成員變量值是否相同,而不再是比較類在堆內(nèi)存中的存放地址了。舉例說明結(jié)果說明中有其自身的實(shí)現(xiàn),屬于內(nèi)容比較。

在研究hashcode的用法,發(fā)現(xiàn)自己對equals的理解還不夠深,廢話少說,繼續(xù)專研,記錄如下:

要想搞清楚equals和==的區(qū)別,就先要搞清楚JAVA的數(shù)據(jù)類型:

java的數(shù)據(jù)類型只要分兩大類:

基本數(shù)據(jù)類型

引用數(shù)據(jù)類型

== 比較的是什么?

基本數(shù)據(jù)類型(也稱原始數(shù)據(jù)類型) :byte,short,char,int,long,float,double,boolean。他們之間的比較,應(yīng)用雙等號(==),比較的是他們的值。

引用數(shù)據(jù)類型:當(dāng)他們用(==)進(jìn)行比較的時(shí)候,比較的是他們在內(nèi)存中的存放地址(確切的說,是堆內(nèi)存地址)。

equals比較的是什么

JAVA當(dāng)中所有的類都是繼承于Object這個(gè)超類的,在Object類中定義了一個(gè)equals的方法,equals的源碼是這樣寫的:

public boolean equals(Object obj) {
    //this - s1
    //obj - s2
    return (this == obj);
}

可以看到,這個(gè)方法的初始默認(rèn)行為是比較對象的內(nèi)存地址值,一般來說,意義不大。所以,在一些類庫當(dāng)中這個(gè)方法被重寫了,如String、Integer、Date。在這些類當(dāng)中equals有其自身的實(shí)現(xiàn)(一般都是用來比較對象的成員變量值是否相同),而不再是比較類在堆內(nèi)存中的存放地址了。
所以說,對于復(fù)合數(shù)據(jù)類型之間進(jìn)行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是內(nèi)存中的存放位置的地址值,跟雙等號(==)的結(jié)果相同;如果被復(fù)寫,按照復(fù)寫的要求來。

舉例說明
 @Test
    void Test(){
        String str1 = new String("Hello");
        String str2 = new String("Hello");

        System.out.println(str.equals(str1));
    }

結(jié)果:

true 
說明String中equals有其自身的實(shí)現(xiàn),屬于內(nèi)容比較。
    @Test
    public void TestString(){
        String str1 = "Hello";
        String str2 = "Hello";
        System.out.println(str1 == str2);

        String str3 = new String("Hello");
        String str4= new String("Hello");
        System.out.println(str3 == str4);

        System.out.println(str1.equals(str2));
        System.out.println(str3.equals(str4));
        System.out.println(str1.equals(str3));
        System.out.println(str3.equals(str1));

    }
true
false
true
true
true
true

str3==str4 輸出 fasle 這個(gè)好理解,因?yàn)閟tr3和str4內(nèi)存地址不一樣
那么str1==str2為什么是true呢?
根據(jù)說上文分析,string類不屬于非基本數(shù)據(jù)類型,這說明str1 和str2 的地址相同,str1 和str2 的地址為什么會相同?
查閱資料,發(fā)現(xiàn) :
String str1 = "Hello";
這種方式,java首先會在緩沖區(qū)查找是否有"Hello"這個(gè)常量對象,有就直接將其地址賦給s1,沒有就創(chuàng)建一個(gè)"Hello",然后將其賦給s1;然后
String str2 = "Hello";
java同樣會在緩沖區(qū)中查找"Hello",這次能查找到了,因?yàn)閟1創(chuàng)建了一個(gè)"Hello",所以會將其地址賦給s2,如此,str1和str2便有了相同的地址。

參考文章:https://www.cnblogs.com/smyhv...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76964.html

相關(guān)文章

  • 夯實(shí)基礎(chǔ)系列一:Java 基礎(chǔ)總結(jié)

    摘要:可實(shí)現(xiàn)單例模式代碼塊初始化靜態(tài)變量,只被執(zhí)行一次內(nèi)部類不能與外部類重名,只能訪問外部類靜態(tài)數(shù)據(jù)包括私有多分支選擇整型或字符類型變量或整數(shù)表達(dá)式開始支持。 前言 大學(xué)期間接觸 Java 的時(shí)間也不短了,不論學(xué)習(xí)還是實(shí)習(xí),都讓我發(fā)覺基礎(chǔ)的重要性?;ヂ?lián)網(wǎng)發(fā)展太快了,各種框架各種技術(shù)更新迭代的速度非???,可能你剛好掌握了一門技術(shù)的應(yīng)用,它卻已經(jīng)走在淘汰的邊緣了。 而學(xué)習(xí)新技術(shù)總要付出一定的時(shí)間...

    greatwhole 評論0 收藏0
  • 夯實(shí)Java:從面向?qū)ο笳f起

    摘要:面向?qū)ο笈c面向過程的區(qū)別要知道,二者并不是非此即彼,而是相輔相成的。而面向過程,則在微觀上對對象內(nèi)部進(jìn)行具體的實(shí)現(xiàn)。面向?qū)ο蟮娜筇匦哉f到面向?qū)ο螅筒坏貌徽f其三大特性封裝繼承和多態(tài)。封裝封裝是面向?qū)ο笞罨A(chǔ)的特性。 作者:伯特出處:github.com/ruicbAndroid/LoulanPlan聲明:本文出自伯特的《LoulanPlan》,轉(zhuǎn)載務(wù)必注明作者及出處。 剛學(xué)習(xí) Jav...

    hearaway 評論0 收藏0
  • 夯實(shí)基礎(chǔ)-作用域與閉包

    摘要:作用域分類作用域共有兩種主要的工作模型。換句話說,作用域鏈?zhǔn)腔谡{(diào)用棧的,而不是代碼中的作用域嵌套。詞法作用域詞法作用域中,又可分為全局作用域,函數(shù)作用域和塊級作用域。 一篇鞏固基礎(chǔ)的文章,也可能是一系列的文章,梳理知識的遺漏點(diǎn),同時(shí)也探究很多理所當(dāng)然的事情背后的原理。 為什么探究基礎(chǔ)?因?yàn)槟悴蝗ッ嬖嚹憔筒恢阑A(chǔ)有多重要,或者是說當(dāng)你的工作經(jīng)歷沒有亮點(diǎn)的時(shí)候,基礎(chǔ)就是檢驗(yàn)?zāi)愫脡牡囊豁?xiàng)...

    daydream 評論0 收藏0
  • 夯實(shí)基礎(chǔ)系列二:網(wǎng)絡(luò)知識總結(jié)

    摘要:今天總結(jié)下與網(wǎng)絡(luò)相關(guān)的知識,不是那么詳細(xì),但是包含了我認(rèn)為重要的所有點(diǎn)。概要網(wǎng)絡(luò)知識我做了個(gè)方面的總結(jié),包括協(xié)議,協(xié)議,協(xié)議,協(xié)議,協(xié)議,,攻擊,其他協(xié)議??缬蛎缃癖黄毡橛迷诰W(wǎng)絡(luò)中,例如等。擁塞窗口的大小又取決于網(wǎng)絡(luò)的擁塞狀況。 前言 無論是 C/S 開發(fā)還是 B/S 開發(fā),無論是前端開發(fā)還是后臺開發(fā),網(wǎng)絡(luò)總是無法避免的,數(shù)據(jù)如何傳輸,如何保證正確性和可靠性,如何提高傳輸效率,如何解...

    wfc_666 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<