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

java中的數(shù)據(jù)類型项秉,可分為兩類:

1.基本數(shù)據(jù)類型,也稱原始數(shù)據(jù)類型慷彤。byte,short,char,int,long,float,double,boolean

他們之間的比較娄蔼,應(yīng)用雙等號(hào)(==),比較的是他們的值。

2.復(fù)合數(shù)據(jù)類型(類)

當(dāng)他們用(==)進(jìn)行比較的時(shí)候底哗,比較的是他們?cè)趦?nèi)存中的存放地址岁诉,所以,除非是同一個(gè)new出來(lái)的對(duì)象跋选,他們的比較后的結(jié)果為true涕癣,否則比較后結(jié)果為false。JAVA當(dāng)中所有的類都是繼承于Object這個(gè)基類的前标,在Object中的基類中定義了一個(gè)equals的方法坠韩,這個(gè)方法的初始行為是比較對(duì)象的內(nèi)存地 址距潘,但在一些類庫(kù)當(dāng)中這個(gè)方法被覆蓋掉了,如String,Integer,Date在這些類當(dāng)中equals有其自身的實(shí)現(xiàn)只搁,而不再是比較類在堆內(nèi)存中的存放地址了音比。

對(duì)于復(fù)合數(shù)據(jù)類型之間進(jìn)行equals比較,在沒(méi)有覆寫equals方法的情況下氢惋,他們之間的比較還是基于他們?cè)趦?nèi)存中的存放位置的地址值的洞翩,因?yàn)镺bject的equals方法也是用雙等號(hào)(==)進(jìn)行比較的,所以比較后的結(jié)果跟雙等號(hào)(==)的結(jié)果相同焰望。

1publicclassTestString {

2publicstaticvoidmain(String[] args) {

3String s1="Monday";

4String s2="Monday";

5if(s1==s2)

6{

7System.out.println("s1 == s2");}

8else{

9System.out.println("s1 != s2");}

10}

11}

編譯并運(yùn)行程序骚亿,輸出:s1 == s2說(shuō)明:s1 與 s2 引用同一個(gè) String 對(duì)象 -- "Monday"!

2.再稍微改動(dòng)一下程序,會(huì)有更奇怪的發(fā)現(xiàn):

publicclassTestString {

publicstaticvoidmain(String[] args) {

String s1="Monday";

String s2=newString("Monday");

if(s1==s2)

{System.out.println("s1 == s2");}

else

{System.out.println("s1 != s2");}

if(s1.equals(s2)) {System.out.println("s1 equals s2");}

else{

System.out.println("s1 not equals s2");}

}

}

我們將s2用new操作符創(chuàng)建

程序輸出:

s1 != s2

s1 equals s2

說(shuō)明:s1 s2分別引用了兩個(gè)"Monday"String對(duì)象

3. 字符串緩沖池

原來(lái)熊赖,程序在運(yùn)行的時(shí)候會(huì)創(chuàng)建一個(gè)字符串緩沖池當(dāng)使用 s2 = "Monday" 這樣的表達(dá)是創(chuàng)建字符串的時(shí)候来屠,程序首先會(huì)在這個(gè)String緩沖池中尋找相同值的對(duì)象,在第一個(gè)程序中秫舌,s1先被放到了池中的妖,所以在s2被創(chuàng)建的時(shí)候,程序找到了具有相同值的 s1

將s2引用s1所引用的對(duì)象"Monday"

第二段程序中足陨,使用了 new 操作符嫂粟,他明白的告訴程序:"我要一個(gè)新的!不要舊的墨缘!"于是一個(gè)新的"Monday"Sting對(duì)象被創(chuàng)建在內(nèi)存中星虹。他們的值相同,但是位置不同镊讼,一個(gè)在池中游泳一個(gè)在岸邊休息宽涌。哎呀,真是資源浪費(fèi)蝶棋,明明是一樣的非要分開做什么呢卸亮?

4.再次更改程序:

publicclassTestString {

publicstaticvoidmain(String[] args) {

String s1="Monday";

String s2=newString("Monday");

s2=s2.intern();

if(s1==s2)

{System.out.println("s1 == s2");}

else

{System.out.println("s1 != s2");}

if(s1.equals(s2)) {System.out.println("s1 equals s2");}

else{

System.out.println("s1 not equals s2");}

}

}

這次加入:s2 = s2.intern();

程序輸出:

s1 == s2

s1 equals s2

原 來(lái),(java.lang.String的intern()方法"abc".intern()方法的返回值還是字符串"abc"玩裙,表面上看起來(lái)好像這個(gè)方 法沒(méi)什么用處兼贸。但實(shí)際上,它做了個(gè)小動(dòng)作:檢查字符串池里是否存在"abc"這么一個(gè)字符串吃溅,如果存在溶诞,就返回池里的字符串;如果不存在决侈,該方法會(huì) 把"abc"添加到字符串池中螺垢,然后再返回它的引用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市枉圃,隨后出現(xiàn)的幾起案子功茴,更是在濱河造成了極大的恐慌,老刑警劉巖讯蒲,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痊土,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡墨林,警方通過(guò)查閱死者的電腦和手機(jī)赁酝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)旭等,“玉大人酌呆,你說(shuō)我怎么就攤上這事∩Ω” “怎么了隙袁?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)弃榨。 經(jīng)常有香客問(wèn)我菩收,道長(zhǎng),這世上最難降的妖魔是什么鲸睛? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任娜饵,我火速辦了婚禮,結(jié)果婚禮上官辈,老公的妹妹穿的比我還像新娘箱舞。我一直安慰自己,他們只是感情好拳亿,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布晴股。 她就那樣靜靜地躺著,像睡著了一般肺魁。 火紅的嫁衣襯著肌膚如雪电湘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天鹅经,我揣著相機(jī)與錄音胡桨,去河邊找鬼。 笑死瞬雹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刽虹。 我是一名探鬼主播酗捌,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了胖缤?” 一聲冷哼從身側(cè)響起尚镰,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哪廓,沒(méi)想到半個(gè)月后狗唉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涡真,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年分俯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哆料。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缸剪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出东亦,到底是詐尸還是另有隱情杏节,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布典阵,位于F島的核電站奋渔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏壮啊。R本人自食惡果不足惜嫉鲸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望他巨。 院中可真熱鬧充坑,春花似錦、人聲如沸染突。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)份企。三九已至也榄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間司志,已是汗流浹背甜紫。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骂远,地道東北人囚霸。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像激才,于是被迫代替她去往敵國(guó)和親拓型。 傳聞我的和親對(duì)象是個(gè)殘疾皇子额嘿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法劣挫,內(nèi)部類的語(yǔ)法册养,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法压固,線程的語(yǔ)...
    子非魚_t_閱讀 31,665評(píng)論 18 399
  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子球拦,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔...
    葉總韓閱讀 5,140評(píng)論 0 41
  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子帐我,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子坎炼,小兔子...
    趙宇_阿特奇閱讀 1,875評(píng)論 0 2
  • equals方法和==的區(qū)別 首先大家知道,String既可以作為一個(gè)對(duì)象來(lái)使用焚刚,又可以作為一個(gè)基本類型來(lái)使用点弯。這...
    加油小杜閱讀 381評(píng)論 0 0
  • java中String的常用方法 1、length()字符串的長(zhǎng)度 例:char chars[]={'a','b'...
    赤赤有名閱讀 2,065評(píng)論 0 10