再談"值傳遞"和"引用傳遞"

引言

這個(gè)問(wèn)題比較基礎(chǔ),但是也有必要一提,全當(dāng)再?gòu)?fù)習(xí)一下吧必指。java里到底是值傳遞還是引用傳遞呢囊咏?如果是引用傳遞,好像也能解釋清楚"一個(gè)對(duì)象被傳入方法,方法中對(duì)對(duì)象屬性的修改會(huì)影響外層對(duì)象的值"。如果是值傳遞也有點(diǎn)說(shuō)不過(guò)去,如果在方法內(nèi)對(duì)這個(gè)對(duì)象重新初始化塔橡,卻對(duì)外層對(duì)象沒(méi)有任何影響梅割。帶著這幾個(gè)疑問(wèn)來(lái)看一看吧!

測(cè)試一下
   public static void main(String[] args) {
        int index = 1;
        change(index);
        System.out.println(index);
    }

    private static void change(int index) {
       index = 3;
    }

結(jié)果是1,因?yàn)閭魅氲氖腔绢愋妥兞?方法內(nèi)的index=3賦值操作不影響外層的輸出。那么換成引用類型呢葛家?

    public static void main(String[] args) {
        Inner inner = new Inner();
        inner.setId(32);
        inner.setUserName("jerrik");

        printDetail(inner);

        System.out.println(inner);
    }

    private static void printDetail(Inner inner) {
        inner.setId(27);
    }

結(jié)果是27 - jerrik户辞,無(wú)論是值傳遞還是引用傳遞都可以解釋。再來(lái)一個(gè)測(cè)試程序驗(yàn)證一下:

    public static void main(String[] args) {
        Inner inner = new Inner();
        inner.setId(32);
        inner.setUserName("jerrik");

        change(inner);
        System.out.println(inner);
    }

    private static void change(Inner inner) {
        inner = new Inner();
    }

這里輸出:32 - jerrik惦银。這下可以解釋清楚了,如果inner對(duì)象作為值傳遞的參數(shù),方法內(nèi)將該inner置空,則應(yīng)該輸出空值才對(duì),所以可以得出結(jié)論:java并不是使用對(duì)象的值作為傳遞的 。如果是引用傳遞,則是將外層引用重新指向了一個(gè)新地址,也應(yīng)該輸出空值末誓。那到底傳遞是什么呢扯俱?

權(quán)威依據(jù)

《JAVA核心技術(shù)》中講到"java程序設(shè)計(jì)語(yǔ)言總是采用值調(diào)用。也就是說(shuō)喇澡,方法得到的是所有參數(shù)值的一個(gè)拷貝迅栅,方法不能修改傳遞給它的任何參數(shù)變量的內(nèi)容。"
說(shuō)明傳遞的并不是對(duì)象的值,而是重新創(chuàng)建了一份拷貝進(jìn)行傳入,那到底是對(duì)象的拷貝還是引用的拷貝呢晴玖?如果是對(duì)象的拷貝,在堆中則會(huì)存在兩個(gè)Inner對(duì)象,那么對(duì)拷貝出來(lái)的對(duì)象進(jìn)行設(shè)值不會(huì)影響外層,但是和事實(shí)剛好相反,所以排除是對(duì)象的拷貝读存。那么就只能是棧內(nèi)存地址的拷貝,使它們同時(shí)指向堆內(nèi)的同一個(gè)地址,所以可以通過(guò)set來(lái)修改外層對(duì)象的值,即使通過(guò)inner = new Inner();也只會(huì)使這份拷貝出來(lái)的新地址指向這個(gè)新對(duì)象,而不會(huì)影響原來(lái)的對(duì)象。

棧內(nèi)存的拷貝

new Inner內(nèi)存變化

結(jié)論

當(dāng)發(fā)生方法調(diào)用的時(shí)候,傳入的是外層對(duì)象棧內(nèi)存地址的一份拷貝,也是一個(gè)數(shù)值呕屎,指向的還是同一塊堆內(nèi)存让簿,所以java采用的不是引用傳遞而是值傳遞。最后秀睛,本文是根據(jù)個(gè)人理解整理的,如有勘誤請(qǐng)多諒解!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尔当,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蹂安,更是在濱河造成了極大的恐慌椭迎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件田盈,死亡現(xiàn)場(chǎng)離奇詭異畜号,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)允瞧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門简软,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蛮拔,“玉大人,你說(shuō)我怎么就攤上這事替饿∮镌螅” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵视卢,是天一觀的道長(zhǎng)踱卵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)据过,這世上最難降的妖魔是什么惋砂? 我笑而不...
    開(kāi)封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮绳锅,結(jié)果婚禮上西饵,老公的妹妹穿的比我還像新娘。我一直安慰自己鳞芙,他們只是感情好眷柔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著原朝,像睡著了一般驯嘱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喳坠,一...
    開(kāi)封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天鞠评,我揣著相機(jī)與錄音,去河邊找鬼壕鹉。 笑死剃幌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晾浴。 我是一名探鬼主播负乡,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼脊凰!你這毒婦竟也來(lái)了敬鬓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笙各,失蹤者是張志新(化名)和其女友劉穎钉答,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杈抢,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡数尿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惶楼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片右蹦。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诊杆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出何陆,到底是詐尸還是另有隱情晨汹,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布贷盲,位于F島的核電站淘这,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巩剖。R本人自食惡果不足惜铝穷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佳魔。 院中可真熱鬧曙聂,春花似錦、人聲如沸鞠鲜。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贤姆。三九已至榆苞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間庐氮,已是汗流浹背语稠。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工宋彼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弄砍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓输涕,卻偏偏與公主長(zhǎng)得像音婶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子莱坎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法衣式,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法檐什,繼承相關(guān)的語(yǔ)法碴卧,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,598評(píng)論 18 399
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,090評(píng)論 1 32
  • [TOC] 現(xiàn)象描述 收到同事求助乃正,vbox啟動(dòng)報(bào)錯(cuò)住册,關(guān)于uuid的,后來(lái)各種修改文件瓮具,刪除了.vbox重建無(wú)果荧飞,...
    LanK陳閱讀 2,862評(píng)論 0 0
  • 案主凡人,女,在校大學(xué)生叹阔, 案主自述挠轴, 畫此幅時(shí),家族內(nèi)有位老人剛走 屋子里的人是案主耳幢,房屋外哭泣的人是案主的母親岸晦。母...
    楊文彩閱讀 803評(píng)論 2 2
  • 橘子是不好看的,是常人眼里坑坑洼洼的帅掘。但是它在房間里慢慢的緩緩的散發(fā)出橘子的氣息委煤,這不是由今天的陽(yáng)光明媚抑或陰雨連...
    心律難平閱讀 134評(píng)論 0 0