Java的值傳遞

??對值傳遞缸废、引用傳遞有些疑問包蓝,綜合其他人的解釋,加上自己的理解企量,在這里分享一下测萎,如有不當之處,懇請指出届巩。

1硅瞧、概念

??值傳遞、引用傳遞恕汇,是計算機領(lǐng)域的專有名詞腕唧。
??值傳遞和引用傳遞或辖,屬于函數(shù)調(diào)用時參數(shù)的求值策略(Evaluation Strategy),這是對調(diào)用函數(shù)時枣接,求值和傳值的方式的描述颂暇,而非傳遞的內(nèi)容的類型(內(nèi)容指:是值類型還是引用類型,是值還是指針)但惶。(參考:鏈接:https://www.zhihu.com/question/31203609/answer/112157038作者:Yolanda耳鸯。著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)膀曾,非商業(yè)轉(zhuǎn)載請注明出處县爬。)
??值傳遞和引用傳遞,和Java概念里的值類型(基本數(shù)據(jù)類型)妓肢、引用類型(String捌省、數(shù)組等)沒有任何聯(lián)系,這一點比較容易混淆碉钠。值類型/引用類型纲缓,是用于區(qū)分兩種內(nèi)存分配方式,值類型在調(diào)用棧上分配喊废,引用類型在堆上分配祝高。一個描述內(nèi)存分配方式,一個描述參數(shù)求值策略污筷,兩者之間無任何依賴或約束關(guān)系工闺。

2、為什么Java中的是值傳遞

image.png

2.1例一(參數(shù)為基本數(shù)據(jù)類型)

  public static void main(String[] args) {
         int i = 0;
        //傳一個值類型(基本數(shù)據(jù)類型)
        test1(i);
        System.out.println("i="+i);
        //結(jié)果:i=0
    }
    /**
     * 函數(shù)一
     * @param param
     */
    public static void test1(int param) {
        //  摔了一跤
        param = 1;
    }

??例一中瓣蛀,param存儲的是拷貝傳入變量的值陆蟆,而不是地址。打個比方惋增,我(變量i)有一杯水(i=0)叠殷,你(test1函數(shù))也想要喝,但是不能直接把我的喝掉诈皿,不然我就沒得喝了林束,于是乎,你拿出雙魚玉佩(參數(shù)param)復制了一杯一模一樣的水』鳎現(xiàn)在壶冒,我們都有了一杯水。然后截歉,你一不小心胖腾,摔了一跤,把那杯水倒在地上了( test1中param = 1;),你的水沒了胸嘁,但是對我沒有什么影響瓶摆。所以,結(jié)果:i=0

2.1例二(參數(shù)為引用數(shù)據(jù)類型:String)

  public static void main(String[] args) {
        String s="s1";
        //傳一個引用類型(引用數(shù)據(jù)類型:String)
        test2(s);
        System.out.println("s="+s);
        //結(jié)果:s=s1
    }
    /**
     * 函數(shù)二
     * @param param
     */
    public static void test2(String param) {
        //  吃的開心性宏,去唱歌
        param = "s2";
    }

??例二中群井,param存儲的是拷貝傳入變量的地址。打個比方毫胜,我(s)在沙縣國際大飯店定了個包間“芙蓉廳”书斜,服務員給了我一張房卡(s="s1";),同時我邀請你(test2函數(shù))也來酵使,找服務員給了你一張“芙蓉廳”的房卡(param="s1")荐吉,吃了一半,你吃飽了口渔,想去唱歌样屠,你把“芙蓉廳”的房卡(param="s1")扔了,換了“真難聽”ktv包間的房卡(param = "s2";)缺脉。此時痪欲,我手里的仍然是“芙蓉廳”的房卡(param="s1"),你的換的是自己手里的卡攻礼,并沒有把“芙蓉廳”拆了业踢,重新裝修成“真難聽”ktv包間。所以礁扮,結(jié)果:s=s1

2.1例三(參數(shù)為引用數(shù)據(jù)類型:數(shù)組)

  public static void main(String[] args) {
        int[] arr=new int[1];
        arr[0]=1;
        //傳一個引用類型(引用數(shù)據(jù)類型:數(shù)組)
        test3(arr);
        System.out.println("arr[0]="+arr[0]);
        //結(jié)果:arr[0]=99
    }
    /**
     * 函數(shù)三
     * @param arrParam 復制房卡arr
     */
    public static void test3(int[] arrParam) {
        //喝多了知举,砸場子
        arrParam[0] = 99;
    }

??例三中,param存儲的是拷貝傳入變量的地址太伊。打個比方雇锡,我在沙縣國際大飯店定了個包間“芙蓉廳”,服務員給了我一張房卡(arr)僚焦,我點了一桌子菜(arr[0]=1;)遮糖,同時我邀請你(test3函數(shù))也來,找服務員也給了你一張“芙蓉廳”的房卡(arrParam=arr叠赐,復制arr的地址),吃了一半屡江,你喝多了芭概,發(fā)酒瘋,把桌子砸了(arrParam[0] = 99;)惩嘉。我從去了趟廁所罢洲,回來一看,一片狼藉,還以為走錯了惹苗,拿出卡一看殿较,還是arr呀,沒錯呀桩蓉,但是一桌子菜砸成渣了(arr[0] = 99;)淋纲。所以,結(jié)果:arr[0] = 99;

3院究、總結(jié)

??首先洽瞬,在Java中是值傳遞。值傳遞业汰、引用傳遞中的“值”伙窃、“引用”和Java中的數(shù)據(jù)類型(基本數(shù)據(jù)類型、引用數(shù)據(jù)類型)沒有關(guān)系样漆,不用把這一點搞混淆为障。
??其次,在Java中放祟,變量傳給某個函數(shù)后鳍怨,變量本身的值、地址沒有影響舞竿。例三中京景,雖然arr[0] = 99;但是arr數(shù)組本身指向的地址卻沒有改變,改變的是數(shù)組元素中的地址骗奖。
??最后确徙,以上是個人對Java值傳遞的理解,歡迎和大家一起溝通交流执桌。
??著作權(quán)歸作者所有鄙皇。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處仰挣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伴逸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子膘壶,更是在濱河造成了極大的恐慌错蝴,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颓芭,死亡現(xiàn)場離奇詭異顷锰,居然都是意外死亡,警方通過查閱死者的電腦和手機亡问,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進店門官紫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事束世≡统拢” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵毁涉,是天一觀的道長沉帮。 經(jīng)常有香客問我,道長薪丁,這世上最難降的妖魔是什么遇西? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮严嗜,結(jié)果婚禮上粱檀,老公的妹妹穿的比我還像新娘。我一直安慰自己漫玄,他們只是感情好茄蚯,可當我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睦优,像睡著了一般渗常。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汗盘,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天皱碘,我揣著相機與錄音,去河邊找鬼隐孽。 笑死癌椿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的菱阵。 我是一名探鬼主播踢俄,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼晴及!你這毒婦竟也來了都办?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤虑稼,失蹤者是張志新(化名)和其女友劉穎琳钉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛛倦,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡歌懒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胰蝠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茸塞,靈堂內(nèi)的尸體忽然破棺而出躲庄,到底是詐尸還是另有隱情,我是刑警寧澤钾虐,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布噪窘,位于F島的核電站,受9級特大地震影響效扫,放射性物質(zhì)發(fā)生泄漏倔监。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一菌仁、第九天 我趴在偏房一處隱蔽的房頂上張望浩习。 院中可真熱鬧,春花似錦济丘、人聲如沸谱秽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疟赊。三九已至,卻和暖如春峡碉,著一層夾襖步出監(jiān)牢的瞬間近哟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工鲫寄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吉执,地道東北人。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓塔拳,卻偏偏與公主長得像鼠证,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子靠抑,可洞房花燭夜當晚...
    茶點故事閱讀 43,566評論 2 349

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

  • JAVA 的值傳遞 預備知識 對象變量與對象在 Java 中量九,任何對象變量的值都是對存儲在另外一個地方(堆)的一個...
    又是很難取名字的付小白閱讀 308評論 0 0
  • 大家好我是白澤。 這篇打算講講java開發(fā)中新人要知道的一些事情吧 對象引用和值引用颂碧,這個是在基礎(chǔ)不過的知識了荠列,但...
    白澤1935閱讀 334評論 0 0
  • 看過一些Java教材的話,對這句話應該不陌生: “在Java里面參數(shù)傳遞都是按值傳遞”這句話的意思是:按值傳遞是傳...
    jacky123閱讀 548評論 0 1
  • Java的值傳遞和引用傳遞問題 String的對象是不可修改的载城,如果真正要達到改變字符串的效果肌似,我們需要使用Str...
    gadfly_only閱讀 595評論 0 50
  • 失控關(guān)于作者:凱文·凱利,當今世界最受關(guān)注的未來學家诉瓦,也被人們親切的稱為“KK”川队。美國著名雜志《連線》第一任主編力细,...
    珠峰頂看星象閱讀 179評論 0 1