深入理解引用與引用傳遞

1.引用的本質(zhì)

比如示例代碼:

該代碼內(nèi)存及引用創(chuàng)建過程

(1)

Object obj=new Object();

在堆內(nèi)存創(chuàng)建object對象,對象地址為40f1。然后在棧內(nèi)存創(chuàng)建引用围小,引用也是有地址的昵骤,該地址所在堆內(nèi)存存儲的數(shù)據(jù)被賦予為40f1树碱,指向創(chuàng)建的object。

(2)

obj=new Object();

由于new關(guān)鍵字变秦,在堆內(nèi)存中創(chuàng)建新的object對象成榜,對象地址為40fb。然后把引用存儲的數(shù)據(jù)重新賦予為新的object地址

綜上可得:


2.引用傳遞的本質(zhì)

先看一段代碼:

注意:輸出結(jié)果為 :Hello而不是World

調(diào)用過程分析:

  • (1)在棧內(nèi)存中為testString()分配一段內(nèi)存空間蹦玫,然后再在堆內(nèi)存中創(chuàng)建Holle字符串赎婚,地址為5A1c,接在來在棧內(nèi)存中穿件String類型的引用樱溉,值為5A1C挣输,指向holle字符串。
  • (2)調(diào)用changeString函數(shù)福贞,然后為形參引用開辟內(nèi)存空間將實參的值傳遞給形參撩嚼,這樣形參的引用也指向了堆內(nèi)存中的Holle字符串。(注意在棧內(nèi)存中實參和形參兩個引用str的地址是不同的)
  • (3)在堆內(nèi)存中為字符串“World”新開創(chuàng)內(nèi)存空間地址為5AB6挖帘,并把changeString函數(shù)中的形參引用str指向新的字符串完丽。此時形參str的值變?yōu)?AB5。

完成了changeString函數(shù)后拇舀,形參引用被棧內(nèi)存回收了逻族,響應(yīng)的指向也被回收了。Wolrd也因為沒有引用指向它骄崩,所以也會被響應(yīng)地被垃圾回收器回收掉聘鳞。
最后只有原來的引用還在所以打印結(jié)果為:Holle

其他引用類型傳遞以此類推:
例如:輸出結(jié)果AAA

總結(jié):


3.改變對象的值

另一種情況(輸出結(jié)果為BBB)

調(diào)用過程分析:


  • (1)在棧內(nèi)存中為testPerson()分配一段內(nèi)存空間薄辅,然后再在堆內(nèi)存中創(chuàng)建person對象,地址為5B1c抠璃,同時也創(chuàng)建字符串類型對象name长搀,地址為5A8F,接在來在棧內(nèi)存中穿件person類型的引用P,值為5B1C鸡典,指向創(chuàng)建person對象源请。
  • (2)調(diào)用changePerson函數(shù),然后為形參引用開辟內(nèi)存空間將實參的值傳遞給形參彻况,這樣形參的引用p也指向了堆內(nèi)存中的Person對象谁尸。(注意在棧內(nèi)存中實參和形參兩個引用p的地址是不同的)


  • (3)在堆內(nèi)存中為字符串“BBB”新開創(chuàng)內(nèi)存空間地址為5B46,并把changePerson函數(shù)中的形參引用str中的name引用指向新的字符串纽甘。person中name引用的值變?yōu)?B46良蛮,指向 。
    完成了changePerson函數(shù)后悍赢,相應(yīng)的引用指向還在testPerson()方法里决瞳。所以并不會被垃圾回收器回收掉。
    所以打印結(jié)果為:“BBB”

再另一種情況:

輸出結(jié)果仍舊為Holle

  • (1)在棧內(nèi)存中為testString01()分配一段內(nèi)存空間左权,然后再在堆內(nèi)存中創(chuàng)建Holle字符串皮胡,地址為5A1c,接在來在棧內(nèi)存中穿件String類型的引用赏迟,值為5A1C屡贺,指向holle字符串。
  • (2)調(diào)用changeString01函數(shù)锌杀,然后為形參引用開辟內(nèi)存空間將實參的值傳遞給形參甩栈,這樣形參的引用也指向了堆內(nèi)存中的Holle字符串。(注意在棧內(nèi)存中實參和形參兩個引用str的地址是不同的)
  • (3)調(diào)用replaceall方法在堆內(nèi)存中為字符串“World”新開創(chuàng)內(nèi)存空間地址為5A39糕再,然而并沒有引用指向它量没。

完成了changeString01函數(shù)后,形參引用被棧內(nèi)存回收了突想,響應(yīng)的指向也被回收了殴蹄。Wolrd也因為沒有有引用指向它,所以也會被響應(yīng)地被垃圾回收器回收掉蒿柳。
最后只有原來的引用還在所以打印結(jié)果為:Holle

再看一個案例:

與上面例子不同的是:

str=str.replaceAll("Hello", "World");

在這里由于等于號的存在,將形參指向World饶套,形參值為5A39,changeString02完成后形參引用被回收,引用指向消失垒探,但對world的引用被函數(shù)返回了妓蛮,由于

str=changeString02(str);

的存在,TestString02中的str引用重新指向5A39圾叼,所以輸出為world

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛤克,一起剝皮案震驚了整個濱河市捺癞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌构挤,老刑警劉巖髓介,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異筋现,居然都是意外死亡唐础,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門矾飞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來一膨,“玉大人,你說我怎么就攤上這事洒沦”鳎” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵申眼,是天一觀的道長瞒津。 經(jīng)常有香客問我,道長括尸,這世上最難降的妖魔是什么巷蚪? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮姻氨,結(jié)果婚禮上钓辆,老公的妹妹穿的比我還像新娘。我一直安慰自己肴焊,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布功戚。 她就那樣靜靜地躺著娶眷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啸臀。 梳的紋絲不亂的頭發(fā)上届宠,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音乘粒,去河邊找鬼豌注。 笑死,一個胖子當著我的面吹牛灯萍,可吹牛的內(nèi)容都是我干的轧铁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼旦棉,長吁一口氣:“原來是場噩夢啊……” “哼齿风!你這毒婦竟也來了药薯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤救斑,失蹤者是張志新(化名)和其女友劉穎童本,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脸候,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡穷娱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了运沦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鄙煤。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茶袒,靈堂內(nèi)的尸體忽然破棺而出梯刚,到底是詐尸還是另有隱情,我是刑警寧澤薪寓,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布亡资,位于F島的核電站,受9級特大地震影響向叉,放射性物質(zhì)發(fā)生泄漏锥腻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一母谎、第九天 我趴在偏房一處隱蔽的房頂上張望瘦黑。 院中可真熱鬧,春花似錦奇唤、人聲如沸幸斥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甲葬。三九已至,卻和暖如春懈贺,著一層夾襖步出監(jiān)牢的瞬間经窖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工梭灿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留画侣,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓堡妒,卻偏偏與公主長得像配乱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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

  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,975評論 0 7
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用宪卿,...
    LZM輪回閱讀 3,304評論 0 6
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,352評論 0 35
  • 最近室友在搞代購的诵,天天朋友圈里面各種攻略。說實話佑钾,有這樣一個朋友西疤,是件可喜可悲的事情。每天被各種飽含干貨的代購小知...
    翻滾的潘潘閱讀 290評論 0 2
  • 春風秋月盡是花 離人妄想尋天涯 近在咫尺不得見 隔人隔心萬重山
    草蝶閱讀 225評論 0 1