java的參數(shù)傳遞機(jī)制

Java中沒有指針咬扇,所以也沒有引用傳遞了料祠,僅僅有值傳遞不過可以通過對象的方式來實(shí)現(xiàn)引用傳遞 類似java沒有多繼承 但可以用多次implements 接口實(shí)現(xiàn)多繼承的功能

  值傳遞:方法調(diào)用時(shí)橙垢,實(shí)際參數(shù)把它的值傳遞給對應(yīng)的形式參數(shù)矗积,方法執(zhí)行中形式參數(shù)值的改變不影響實(shí)際參 數(shù)的值艺沼。

  引用傳遞:也稱為傳地址扒秸。方法調(diào)用時(shí),實(shí)際參數(shù)的引用(地址趾代,而不是參數(shù)的值)被傳遞給方法中相對應(yīng)的形式參數(shù)贯底,在方法執(zhí)行中,對形式參數(shù)的操作實(shí)際上就是對實(shí)際參數(shù)的操作撒强,方法執(zhí)行中形式參數(shù)值的改變將會(huì)影響實(shí)際參數(shù)的值禽捆。

? ? ? ?a.傳遞值的數(shù)據(jù)類型:八種基本數(shù)據(jù)類型和String(這樣理解可以糯俗,但是事實(shí)上String也是傳遞的地址,只是string對象和其他對象是不同的,string對象是不能被改變的睦擂,內(nèi)容改變就會(huì)產(chǎn)生新對象。那么StringBuffer就可以了杖玲,但只是改變其內(nèi)容顿仇。不能改變外部變量所指向的內(nèi)存地址)。

  ? b.傳遞地址值的數(shù)據(jù)類型:除String以外的所有復(fù)合數(shù)據(jù)類型摆马,包括數(shù)組臼闻、類和接口?

值傳遞的例子:

package com.other.test;

public class Test {

public static void change(int i, int j) {

int temp = i;

i = j;

j = temp;

}

public static void main(String[] args) {

int a = 3;

int b = 4;

change(a, b);

System.out.println("a=" + a);

System.out.println("b=" + b);

}

}

輸出的結(jié)果是 a=3 b=4,傳遞的值并不會(huì)改變原值

引用傳遞的例子:(數(shù)組)

package com.other.test;

public class Test {

public static void change(int[] counts) {

counts[0] = 6;

System.out.println(counts[0]);

}

public static void main(String[] args) {

int[] count = { 1, 2, 3, 4, 5 };

change(count);

System.out.println(count[0]);

}

}

輸出結(jié)果是6 6 也就是引用的值改變了原來的值

引用傳遞的例子:(對象)

定義一個(gè)A對象:

package com.other.test;

public class A {

int i = 0;

}

對上邊對象操作的類:

package com.other.test;

public class Test {

public static void add(A a) {

//a = new A();? ①

a.i++;

}

public static void main(String args[]) {

A a = new A();

add(a);

System.out.println(a.i );

}

}

當(dāng)把①注解掉時(shí)囤采,輸出的結(jié)果是1述呐,當(dāng)①?zèng)]有注解是是0,原因是 a =new A();構(gòu)造了新的A對象就不是傳遞的那個(gè)對象了蕉毯。

看看String的情況:

package com.other.test;

public class Test {

String str = new String("old");

char[] ch = { 'a', 'b', 'c' };

public static void main(String args[]) {

Test ex = new Test();

ex.change(ex.str, ex.ch);

System.out.print(ex.str + " and ");

System.out.println(ex.ch);

}

public void change(String str, char ch[]) {

str = "new";

ch[0] = 'd';

}

}

輸出的結(jié)果的是 old and dbc也就是傳遞String并不會(huì)改變原值乓搬,而是創(chuàng)建了一個(gè)新值。 ch[]就是一個(gè)簡單的數(shù)組的傳遞代虾。

( 對象包括對象引用即地址和對象的內(nèi)容)

String 比較特別进肯,看過String 代碼的都知道, String 是 final的棉磨。所以值是不變的江掩。 函數(shù)中String對象引用的副本指向了另外一個(gè)新String對象,而數(shù)組對象引用的副本沒有改變,而是改變對象中數(shù)據(jù)的內(nèi)容.?

  對于對象類型,也就是Object的子類乘瓤,如果你在方法中修改了它的成員的值环形,那個(gè)修改是生效的,方法調(diào)用結(jié)束后衙傀,它的成員是新的值抬吟,但是如果你把它指向一個(gè)其它的對象,方法調(diào)用結(jié)束后统抬,原來對它的引用并沒用指向新的對象拗军。?

  Java參數(shù),不管是原始類型還是引用類型蓄喇,傳遞的都是副本(有另外一種說法是傳值发侵,但是說傳副本更好理解吧,傳值通常是相對傳址而言)妆偏。?

  如果參數(shù)類型是原始類型刃鳄,那么傳過來的就是這個(gè)參數(shù)的一個(gè)副本,也就是這個(gè)原始參數(shù)的值钱骂,這個(gè)跟之前所談的傳值是一樣的叔锐。如果在函數(shù)中改變了副本的值不會(huì)改變原始的值.

  如果參數(shù)類型是引用類型挪鹏,那么傳過來的就是這個(gè)引用參數(shù)的副本,這個(gè)副本存放的是參數(shù)的地址愉烙。如果在函數(shù)中沒有改變這個(gè)副本的地址讨盒,而是改變了地址中的值,那么在函數(shù)內(nèi)的改變會(huì)影響到傳入的參數(shù)步责。如果在函數(shù)中改變了副本的地址返顺,如new一個(gè),那么副本就指向了一個(gè)新的地址蔓肯,此時(shí)傳入的參數(shù)還是指向原來的地址遂鹊,所以不會(huì)改變參數(shù)的值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔗包,一起剝皮案震驚了整個(gè)濱河市秉扑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌调限,老刑警劉巖舟陆,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耻矮,居然都是意外死亡吨娜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門淘钟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宦赠,“玉大人,你說我怎么就攤上這事米母」磁ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵铁瞒,是天一觀的道長妙色。 經(jīng)常有香客問我,道長慧耍,這世上最難降的妖魔是什么身辨? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮芍碧,結(jié)果婚禮上煌珊,老公的妹妹穿的比我還像新娘。我一直安慰自己泌豆,他們只是感情好定庵,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般蔬浙。 火紅的嫁衣襯著肌膚如雪猪落。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天畴博,我揣著相機(jī)與錄音笨忌,去河邊找鬼。 笑死俱病,一個(gè)胖子當(dāng)著我的面吹牛官疲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庶艾,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼擎勘!你這毒婦竟也來了咱揍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤棚饵,失蹤者是張志新(化名)和其女友劉穎煤裙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體噪漾,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硼砰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欣硼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片题翰。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诈胜,靈堂內(nèi)的尸體忽然破棺而出豹障,到底是詐尸還是另有隱情,我是刑警寧澤焦匈,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布血公,位于F島的核電站,受9級特大地震影響缓熟,放射性物質(zhì)發(fā)生泄漏累魔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一够滑、第九天 我趴在偏房一處隱蔽的房頂上張望垦写。 院中可真熱鬧,春花似錦彰触、人聲如沸梯澜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晚伙。三九已至吮龄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咆疗,已是汗流浹背漓帚。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留午磁,地道東北人尝抖。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像迅皇,于是被迫代替她去往敵國和親昧辽。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理登颓,服務(wù)發(fā)現(xiàn)搅荞,斷路器,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法框咙,類相關(guān)的語法咕痛,內(nèi)部類的語法,繼承相關(guān)的語法喇嘱,異常的語法茉贡,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 潘峰老師是我在愛心公社舉辦的年會(huì)上認(rèn)識(shí)的,一面之緣者铜。那天活動(dòng)結(jié)束時(shí)腔丧,他在舞臺(tái)旁邊給愛心人士贈(zèng)送他的畫冊。我素來喜歡...
    歡呼收割一閱讀 1,951評論 1 14
  • 昨晚驚聞作烟,舅父身亡悔据,車禍。我雖最近對生死有了新的認(rèn)識(shí)俗壹,然而聽到此消息科汗,心里依舊震動(dòng)了。我的舅父一生淡泊绷雏,沒想到人生...
    心如美玉閱讀 187評論 0 0
  • 二头滔、緣分,隨心而去 高二分班了涎显,開玩笑似的我兩都選了理科坤检,被分到了一個(gè)班-14班,裴老的班級期吓。 這里開始...
    換一個(gè)昵稱閱讀 255評論 0 1