Java基礎(chǔ)系列4:==和equals的區(qū)別

基本數(shù)據(jù)類型
  1. 基本數(shù)據(jù)類型浑吟,也稱原始數(shù)據(jù)類型撮慨,byte.short,int,long,char,boolean,fload,double。
    他們之間的比較應(yīng)用雙等號(==)霎终,比較是他們的值灸促。
  2. 引用數(shù)據(jù)類型
    引用類型用==比較的是他們內(nèi)存地址是否相同诫欠,當(dāng)符合數(shù)據(jù)類型之間進(jìn)行equals比較時,這個方法的出事行為是比較對象在堆內(nèi)存中的地址浴栽。

equals()方法是用來判斷其他的對象是否和該對象相等

對于重寫了equals()方法的荒叼,比較的是內(nèi)容的比較。而基本類型是比較的值典鸡。

Sting類的討論
String a = "abc";
String b = "abc";
System.out.println(a == b);//true

輸出true
說明:==在進(jìn)行復(fù)合數(shù)據(jù)類型比較時被廓,比較的是內(nèi)存中的存放地址。因此a與b引用同一個String對象萝玷。

String b = "abc";
String c = new String("abc");
System.out.println(c == b);//false
System.out.println(c.equals(b));//true

輸出:
false
true
說明:b,c分別引用了兩個對象嫁乘。顯然,兩者內(nèi)容是相同的球碉,因此equal返回true蜓斧。第一個例子也一樣。

范例
String str1= "hello";   
String str2= new String("hello");   
String str3= str2;   
image.png

從圖中可以發(fā)現(xiàn)每個String對象的內(nèi)容實際是保存到堆內(nèi)存中的睁冬,而且堆中的內(nèi)容是相等的挎春,但是對于str1和str2來說所指向的地址堆內(nèi)存地址是不等的,所以盡管內(nèi)容是相等的豆拨,但是地址值是不相等的
“==”是用來進(jìn)行數(shù)值比較的直奋,所以str1和str2比較不相等,因為str2和str3指向同一個內(nèi)存地址所以str2和str3是相等的施禾。所以“==”是用來進(jìn)行地址值比較的脚线。

  1. 為什么Java中1000==1000為false而100==100為true?
Integer i1 = 100, i2 = 100;
System.out.println(i1 == i2);//true
Integer i3 = 1000, i4 = 1000;
System.out.println(i3 == i4);//fales

查看Integer.java類弥搞,會發(fā)現(xiàn)有一個內(nèi)部私有類邮绿,IntegerCache.java,它緩存了從-128到127之間的所有的整數(shù)對象拓巧。
所以i1 == i2 為true斯碌。

== : 它的作用是判斷兩個對象的地址是不是相等一死。即肛度,判斷兩個對象是不是同一個對象(基本數(shù)據(jù)類型==比較的是值,引用數(shù)據(jù)類型==比較的是內(nèi)存地址)投慈。
equals() : 它的作用也是判斷兩個對象是否相等承耿。但它一般有兩種使用情況:

  • 情況1:類沒有覆蓋 equals() 方法冠骄。則通過 equals() 比較該類的兩個對象時,等價于通過“==”比較這兩個對象加袋。
  • 情況2:類覆蓋了 equals() 方法凛辣。一般,我們都覆蓋 equals() 方法來比較兩個對象的內(nèi)容是否相等职烧;若它們的內(nèi)容相等扁誓,則返回 true (即,認(rèn)為這兩個對象相等)蚀之。

舉個栗子:

public class test1 {
    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
            System.out.println("aEQb");
        if (42 == 42.0) { // true
            System.out.println("true");
        }
    }
}

說明:

  • String 中的 equals 方法是被重寫過的,因為 object 的 equals 方法是比較的對象的內(nèi)存地址足删,而 String 的 equals 方法比較的是對象的值寿谴。
  • 當(dāng)創(chuàng)建 String 類型的對象時,虛擬機(jī)會在常量池中查找有沒有已經(jīng)存在的值和要創(chuàng)建的值相同的對象失受,如果有就把它賦給當(dāng)前引用讶泰。如果沒有就在常量池中重新創(chuàng)建一個 String 對象。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拂到,一起剝皮案震驚了整個濱河市痪署,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兄旬,老刑警劉巖惠桃,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辖试,居然都是意外死亡辜王,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門罐孝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呐馆,“玉大人,你說我怎么就攤上這事莲兢⌒诶矗” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵改艇,是天一觀的道長收班。 經(jīng)常有香客問我,道長谒兄,這世上最難降的妖魔是什么摔桦? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上邻耕,老公的妹妹穿的比我還像新娘鸥咖。我一直安慰自己,他們只是感情好兄世,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布啼辣。 她就那樣靜靜地躺著,像睡著了一般御滩。 火紅的嫁衣襯著肌膚如雪鸥拧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天削解,我揣著相機(jī)與錄音住涉,去河邊找鬼。 笑死钠绍,一個胖子當(dāng)著我的面吹牛舆声,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柳爽,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼媳握,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了磷脯?” 一聲冷哼從身側(cè)響起蛾找,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赵誓,沒想到半個月后打毛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俩功,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年幻枉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诡蜓。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡熬甫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔓罚,到底是詐尸還是另有隱情椿肩,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布豺谈,位于F島的核電站郑象,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茬末。R本人自食惡果不足惜厂榛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧噪沙,春花似錦、人聲如沸吐根。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拷橘。三九已至局义,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冗疮,已是汗流浹背萄唇。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留术幔,地道東北人另萤。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像诅挑,于是被迫代替她去往敵國和親四敞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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