java中==和equals的區(qū)別

???????在編程中我們經(jīng)常要比較兩個對象是否相等捌浩,對于什么時候用==快集,什么時候用equals總是把握不清楚际度,下面我們就詳細(xì)探究一下這兩者的區(qū)別葵袭。
???????1.Object 類的 equals 方法實現(xiàn)對象上差別可能性最大的相等關(guān)系;即甲脏,對于任何非空引用值 x 和 y眶熬,當(dāng)且僅當(dāng) x 和y引用同一個對象時,此方法才返回 true(x == y 具有值 true)块请。注意:當(dāng)此方法被重寫時娜氏,通常有必要重寫 hashCode 方法,以維護(hù) hashCode 方法的常規(guī)協(xié)定墩新,該協(xié)定聲明相等對象必須具有相等的哈希碼贸弥。
???????源碼:

public boolean equals(Object obj) {
        return (this == obj);
}

???????2、String中的equals()方法:public boolean equals(Object anObject)將此字符串與指定的對象比較海渊。當(dāng)且僅當(dāng)該參數(shù)不為 null绵疲,并且是與此對象表示相同字符序列的 String 對象時哲鸳,結(jié)果才為 true。
???????源碼(它對equals方法進(jìn)行重寫):

 public boolean equals(Object anObject) {//anObject是傳進(jìn)來的要進(jìn)行比較的對象
           //如果當(dāng)前對象和傳進(jìn)來要進(jìn)行比較的對象anObject是同一個對象(即地址相同eg同一輛汽車(只有一輛))則返回true
         if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {//如果傳進(jìn)來的需要進(jìn)行比較的對象anObject是String類的實例盔憨,則把a(bǔ)nObject轉(zhuǎn)換成String類型
                String anotherString = (String) anObject;
                //value是一個private final char value[];
                //String類的構(gòu)造函數(shù)已經(jīng)給value[]初始化了
                //value.length代表原先要比較對象的字符個數(shù)
                int n = value.length;
                //如果兩者的字符個數(shù)不相等徙菠,意味著兩者不可能相等,所以返回false郁岩;否則婿奔,依次遍歷比較兩者的每一個字符,若每一個字符都相等則相等问慎,否則不想等
                if (n == anotherString.value.length) {
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                                return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
}

???????3.==對于基本數(shù)據(jù)類型萍摊,比較的是兩者的值是否相等,對于引用數(shù)據(jù)類型如叼,比較的是引用的地址是否相同(即是否是同一輛汽車(注意冰木,只有一輛汽車));
???????下面對這幾種比較方法進(jìn)行詳細(xì)的測試笼恰。

package Demo;

import java.util.ArrayList;
import java.util.Stack;

class person{
    
    private String name;
    private int age;
    person(String name , int age){
        this.name=name;
        this.age=age;
    }
    
    
}


public class DemoStringEquals {
    public static void main(String[] args) {
        test2();
    }
    
    public static void test2(){
        //基本數(shù)據(jù)類型
        int a = 5;
        int b = 6;
        int c = 5;
        System.out.println("a==b:"+(a==b));
        System.out.println("a==c:"+(a==c));
    
        //類類型變量
        person p1=new person("a",1);
        person p2=new person("a",1);
        System.out.println("p1==p2:"+(p1==p2));
        System.out.println("p1.equals(p2):"+p1.equals(p2));
        
        //String 類重寫了equals()方法
        
        //str1和str2是兩個不同的類(即共兩輛汽車)踊沸,但是str1和str2的內(nèi)容相同,都是"a"(即挖腰,這兩輛汽車一模一樣雕沿,完全相同)
        String str1= new String("a") ;
        String str2= new String("a");
        
        String str3= "ab" ;
        String str4= "ab" ;
        String str5= "1" ;
        String str6= "1" ;
        String str7= "22" ;
        String str8= "22" ;
        String str9= "" ;
        String str10= " " ;
        String str11= null ;
        String s=str1;
        //==比較的是對象,.equals()比較的是內(nèi)容
        System.out.println("str1==str2 : "+(str1==str2));
        System.out.println("str1.equals(str2) : "+(str1.equals(str2)));
        System.out.println("str1==str3 : "+(str1==str3));
        System.out.println("str1.equals(str3) : "+(str1.equals(str3)));
        System.out.println("str1==str10 : "+(str1==str10));
        System.out.println("str1.equals(str10): "+(str1.equals(str10)));
        System.out.println("str1==str11 : "+(str1==str11));
        System.out.println("str1.equals(str11) : "+(str1.equals(str11)));
        System.out.println("str10.equals(str11) : "+(str10.equals(str11)));
        System.out.println("str1==s : "+(str1==s));
        System.out.println("str1==str11 : "+(str1==str11));
        System.out.println("str1.equals(s) : "+(str1.equals(s)));
        System.out.println("str1.equals(a) : "+(str1.equals("a")));
        System.out.println("str1==a : "+(str1=="a"));
        System.out.println("str11==null : "+(str11==null));
        System.out.println("str11!=null : "+(str11!=null));
        //System.out.println("str11.equals(null): "+(str11.equals(null)));//Exception in thread "main" java.lang.NullPointerException 不能是Null.equals()
        
        
    }
}

???????結(jié)果如下:


image.png

???????總結(jié)一下
???????1猴仑、對于基本數(shù)據(jù)類型,“==”比較的是兩者的值是否相等肥哎。
???????2辽俗、對于引用數(shù)據(jù)類型
?????????(1)“==”比較的是引用的地址是否相同(即是否是同一輛汽車(注意,只有一輛汽車))篡诽;Object中的.equals()方法和"==’功能一樣
?????????(2)但是String類中的.equals()方法重寫了崖飘,比較的是兩個引用對象的內(nèi)容是否想同(即是否是完全相同的汽車(注意,有兩輛汽車杈女,且一模一樣朱浴,完全相同))。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末达椰,一起剝皮案震驚了整個濱河市翰蠢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啰劲,老刑警劉巖梁沧,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蝇裤,居然都是意外死亡廷支,警方通過查閱死者的電腦和手機(jī)频鉴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恋拍,“玉大人垛孔,你說我怎么就攤上這事∈└遥” “怎么了似炎?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悯姊。 經(jīng)常有香客問我羡藐,道長,這世上最難降的妖魔是什么悯许? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任仆嗦,我火速辦了婚禮,結(jié)果婚禮上先壕,老公的妹妹穿的比我還像新娘瘩扼。我一直安慰自己,他們只是感情好垃僚,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布集绰。 她就那樣靜靜地躺著,像睡著了一般谆棺。 火紅的嫁衣襯著肌膚如雪栽燕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天改淑,我揣著相機(jī)與錄音碍岔,去河邊找鬼。 笑死朵夏,一個胖子當(dāng)著我的面吹牛蔼啦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仰猖,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼捏肢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了饥侵?” 一聲冷哼從身側(cè)響起鸵赫,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爆捞,沒想到半個月后奉瘤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年盗温,在試婚紗的時候發(fā)現(xiàn)自己被綠了藕赞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡卖局,死狀恐怖斧蜕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砚偶,我是刑警寧澤批销,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站染坯,受9級特大地震影響均芽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜单鹿,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一掀宋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仲锄,春花似錦劲妙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怀愧,卻和暖如春侨颈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掸驱。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工肛搬, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毕贼。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像蛤奢,于是被迫代替她去往敵國和親鬼癣。 傳聞我的和親對象是個殘疾皇子啤贩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

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