String s = "abc" 和 String s = new String("abc") 的區(qū)別

用以下幾種情況的代碼及分析大致講解 String s = "abc" 和 String s = new String("abc") 的區(qū)別赵颅。

情況1:

(1)
String str1 = "abc"; 
System.out.println(str1 == "abc"); 

步驟

  1. 棧中開(kāi)辟一塊空間存放引用str1;
  2. String池中開(kāi)辟一塊空間,存放String常量"abc"猛遍;
  3. 引用str1指向池中String常量"abc"谷誓;
  4. str1所指代的地址即常量"abc"所在地址掸绞,輸出為true淹遵;

情況2:

(2)
String str2 = new String("abc"); 
System.out.println(str2 == "abc");

步驟

  1. 棧中開(kāi)辟一塊空間存放引用str2;
  2. 堆中開(kāi)辟一塊空間存放一個(gè)新建的String對(duì)象"abc"遂跟;
  3. 引用str2指向堆中的新建的String對(duì)象"abc"逃沿;
  4. str2所指代的對(duì)象地址為堆中地址,而常量"abc"地址在池中漩勤,輸出為false感挥;

注意:對(duì)于通過(guò) new 產(chǎn)生的對(duì)象,會(huì)先去常量池檢查有沒(méi)有 “abc”越败,如果沒(méi)有触幼,先在常量池創(chuàng)建一個(gè) “abc” 對(duì)象,然后在堆中創(chuàng)建一個(gè)常量池中此 “abc” 對(duì)象的拷貝對(duì)象究飞。

  有道面試題: String s = new String(“xyz”); 產(chǎn)生幾個(gè)對(duì)象置谦?

  一個(gè)或兩個(gè)。如果常量池中原來(lái)沒(méi)有 ”xyz”, 就是兩個(gè)亿傅。如果原來(lái)的常量池中存在“xyz”時(shí)媒峡,就是一個(gè)。

對(duì)于基礎(chǔ)類型的變量和常量:變量和引用存儲(chǔ)在棧中葵擎,常量存儲(chǔ)在常量池中谅阿。

情況3、4:

(3)
String str1 = "a"酬滤;
String str2 = "b"签餐;
String str3 = str1 + "b";
//str1 和 str2 是字符串常量盯串,所以在編譯期就確定了氯檐。
//str3 中有個(gè) str1 是引用,所以不會(huì)在編譯期確定体捏。
//又因?yàn)镾tring是 final 類型的冠摄,所以在 str1 + "b" 的時(shí)候?qū)嶋H上是創(chuàng)建了一個(gè)新的對(duì)象,在把新對(duì)象的引用傳給str3几缭。

(4)
final String str1 = "a"河泳;
String str2 = "b";
String str3 = str1 + "b"奏司;
//這里和(3)的不同就是給 str1 加上了一個(gè)final乔询,這樣str1就變成了一個(gè)常量。
//這樣 str3 就可以在編譯期中就確定了

情況5:

intern()方法:當(dāng)調(diào)用 intern 方法時(shí)韵洋,如果常量池已經(jīng)包含一個(gè)等于此 String 對(duì)象的字符串(該對(duì)象由 equals(Object) 方法確定)竿刁,則返回常量池中的字符串。否則搪缨,將此 String 對(duì)象添加到池中食拜,并且返回此 String 對(duì)象的引用。

(5)
String str1 = "ab"副编;
String str2 = new String("ab");
System.out.println(str1== str2);//false
System.out.println(str2.intern() == str1);//true

System.out.println(str1== str2);//false
str2 = str2.intern();
System.out.println(str1== str2);//true

講解:
str1 指向的是常量池對(duì)象 "ab"负甸;
str2 指向的是堆中的對(duì)象 "ab";
調(diào)用了 str2 = str2.intern() 后痹届,str2.intern()判斷常量池中是否有 "ab"對(duì)象呻待,如果有就返回,沒(méi)有就創(chuàng)建并返回队腐,此時(shí)就返回的 str1 所指向的那個(gè)對(duì)象 "ab" 蚕捉。
所以 str1 == str2;

參考文章
http://www.cnblogs.com/wanlipeng/archive/2010/10/21/1857513.html
http://blog.csdn.net/lubiaopan/article/details/4776000/
http://blog.csdn.net/u014082714/article/details/50087563

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末柴淘,一起剝皮案震驚了整個(gè)濱河市幌衣,隨后出現(xiàn)的幾起案子拥刻,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝴光,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡酌毡,警方通過(guò)查閱死者的電腦和手機(jī)吼拥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)夕吻,“玉大人诲锹,你說(shuō)我怎么就攤上這事∷蠊冢” “怎么了辕狰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)控漠。 經(jīng)常有香客問(wèn)我蔓倍,道長(zhǎng),這世上最難降的妖魔是什么盐捷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任偶翅,我火速辦了婚禮,結(jié)果婚禮上碉渡,老公的妹妹穿的比我還像新娘聚谁。我一直安慰自己,他們只是感情好滞诺,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布形导。 她就那樣靜靜地躺著环疼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朵耕。 梳的紋絲不亂的頭發(fā)上炫隶,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音阎曹,去河邊找鬼伪阶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛处嫌,可吹牛的內(nèi)容都是我干的栅贴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼熏迹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼檐薯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起癣缅,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤厨剪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后友存,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體祷膳,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年屡立,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了直晨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膨俐,死狀恐怖勇皇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情焚刺,我是刑警寧澤敛摘,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站乳愉,受9級(jí)特大地震影響兄淫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔓姚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一捕虽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坡脐,春花似錦泄私、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捅暴。三九已至,卻和暖如春斩松,著一層夾襖步出監(jiān)牢的瞬間伶唯,已是汗流浹背觉既。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工惧盹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞪讼。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓钧椰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親符欠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嫡霞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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