Java的參數(shù)傳遞

關于Java的參數(shù)傳遞悔雹,是一個老生常談的問題了复哆,引用傳遞、值傳遞傻傻的分不清楚是許多程序員經(jīng)常遇到的問題腌零,那么今天就來聊聊Java中的參數(shù)傳遞寂恬。

先來看個例子:

    public static void main(String[] args) {
        int[] arr = {3,4,5,6};
        int num = 5;
        changearr(arr);
        changenum(num);
        System.out.println("arr[0] = " + arr[0]);
        System.out.println("num = " + num);
        
    }
    
    public static void changearr(int[] arr) {
        arr[0] = 1;
    }
    public static void changenum(int num) {
        num = 1;
    }

結(jié)果:

arr[0] = 1
num = 5

分析

從上面代碼的運行結(jié)果不難發(fā)現(xiàn),在傳遞基本類型時莱没,方法內(nèi)部并不能改變方法外的變量初肉,而引用類型則會被改變。
那么Java倒底是用的值傳遞還是引用傳遞呢饰躲?

在《Head First Java》里面曾解釋過:

Java在調(diào)用方法牙咏,傳遞參數(shù)的時候,采用的是pass-by-copy的方法嘹裂,傳遞一份內(nèi)容的拷貝妄壶,即傳值。

所以說Java用的應該是值傳遞寄狼,那么為什么會出現(xiàn)上面的情況呢丁寄?

這就涉及到Java中的兩種數(shù)據(jù)類型了:引用類型和基本類型。

1.基本數(shù)據(jù)類型

Java中一共分為8種基本數(shù)據(jù)類型:byte泊愧、short伊磺、int、long删咱、float屑埋、double、char痰滋、boolean,其中byte摘能、short、int敲街、long是整型团搞。float、double是浮點型,char是字符型,boolean是布爾型多艇。
上面這段話相信學過Java的人都看過逻恐,隨便一本講Java的書都應該有。

2.引用數(shù)據(jù)類型

Java中有3種引用類型:class類 、interface接口 梢莽、array數(shù)組。

基本類型和引用類型的區(qū)別

下面關鍵點來了奸披,上面兩種數(shù)據(jù)類型的區(qū)別在哪呢昏名?

基本數(shù)據(jù)類型的變量是存儲在棧內(nèi)存中,而引用類型變量存儲在棧內(nèi)存中阵面,保存的是實際對象在堆內(nèi)存中的地址轻局,實際對象其實是在堆上的。

啥是堆和棧样刷?如果這都區(qū)分不清楚的話仑扑,建議還是去看看JVM內(nèi)存相關的知識,這里就不詳細說了置鼻。

看到這里應該能明白為什么會出現(xiàn)例子中的情況了吧镇饮。

首先,Java確確實實是傳值(pass-by-value)的箕母,在上面的例子里储藐,傳過去的確確實實也是一個值的copy,但是引用型(Reference Type)變量里面存放的值是對象的地址嘶是,那么傳遞過去的就是原對象的地址钙勃。也就是說,在方法中的數(shù)組指向的地址和原數(shù)組指向的地址是一樣的聂喇,而我們對數(shù)組操作時是操作數(shù)組指向的地址段中的內(nèi)容辖源,方法內(nèi)和方法外操作的是同一段內(nèi)存,那么自然改變也是同步的希太。

好像還是不大好理解克饶,看看《Head First Java》里面的電視機和遙控器的例子吧:

引用類型的對象就相當于一個電視機和遙控器,我們傳遞的時候是復制了一個一摸一樣的遙控器誊辉,因此彤路,盡管新舊兩個遙控器不是同一個對象,但是兩個遙控器都可以控制電視芥映,新遙控器換臺洲尊,電視機一樣會響應。

而基本類型的對象則相當于只有一個遙控器奈偏,我們傳遞的時候依舊是復制了一個一摸一樣的遙控器坞嘀,就算我們把新的遙控器拆掉,原來的遙控器也不會受到絲毫影響惊来。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丽涩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矢渊,老刑警劉巖继准,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矮男,居然都是意外死亡移必,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門毡鉴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崔泵,“玉大人,你說我怎么就攤上這事猪瞬≡魅常” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵陈瘦,是天一觀的道長幌甘。 經(jīng)常有香客問我,道長痊项,這世上最難降的妖魔是什么含潘? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮线婚,結(jié)果婚禮上遏弱,老公的妹妹穿的比我還像新娘。我一直安慰自己塞弊,他們只是感情好漱逸,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著游沿,像睡著了一般饰抒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诀黍,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天袋坑,我揣著相機與錄音,去河邊找鬼眯勾。 笑死枣宫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的吃环。 我是一名探鬼主播也颤,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼郁轻!你這毒婦竟也來了翅娶?” 一聲冷哼從身側(cè)響起文留,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎竭沫,沒想到半個月后燥翅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蜕提,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年森书,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贯溅。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖躲查,靈堂內(nèi)的尸體忽然破棺而出它浅,到底是詐尸還是另有隱情,我是刑警寧澤镣煮,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布姐霍,位于F島的核電站,受9級特大地震影響典唇,放射性物質(zhì)發(fā)生泄漏镊折。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一介衔、第九天 我趴在偏房一處隱蔽的房頂上張望恨胚。 院中可真熱鬧,春花似錦炎咖、人聲如沸赃泡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽升熊。三九已至,卻和暖如春绸栅,著一層夾襖步出監(jiān)牢的瞬間级野,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工粹胯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蓖柔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓风纠,卻偏偏與公主長得像渊抽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子议忽,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

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