<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    lotusswan

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      11 Posts :: 0 Stories :: 4 Comments :: 0 Trackbacks
    Java到底是傳值還是傳引用?相信很少有人能完全回答正確。通常的說法是:對于基本數據類型(整型、浮點型、字符型、布爾型等),傳值;對于引用類型(對象、數組),傳引用。基本類型傳值,所有人都不會對此有疑義;問題出在引用類型上。

    為引入正題,不妨先看看下面的例子,你能正確給出程序的運行結果嘛?

    /**
    ?*?@(#)Swap.java
    ?*
    ?*
    ?*?
    @author ?
    ?*?
    @version ?1.00?2007/1/5
    ?
    */



    public ? class ?Swap? {

    ????
    public ?Swap()? {
    ????}

    ????
    ????
    public ? static ? void ?main(String[]?args)? {
    ????????Changer?c?
    = ? new ?Changer();
    ????????
    ????????String?stra?
    = ? " Mighty " ;
    ????????String?strb?
    = ? " Mouse " ;
    ???????????c.swap(stra,?strb);
    ????????System.out.println(stra?
    + ? " ? " ? + ?strb);
    ????????
    ????????String[]?strArr?
    = ? new ?String[ 2 ]?;
    ????????strArr[
    0 ]? = ?stra;
    ????????strArr[
    1 ]? = ?strb;
    ????????c.swap(strArr);
    ????????System.out.println(strArr[
    0 ]? + ?? " ? " ? + ?strArr[ 1 ]);
    ????????
    ????????
    ????}

    ????
    ????
    static ? class ?Changer? {??????
    ????????
    public ? < T > ? void ?swap(T?a,?T?b)? {
    ????????????T?temp?
    = ?a;
    ????????????a?
    = ?b;
    ????????????b?
    = ?temp;
    ????????}

    ????????
    ????????
    public ? < T > ? void ?swap(T[]?t)? {
    ????????????
    if ?(t.length? < ? 2 )? {
    ????????????????System.out.println(
    " error! " );
    ????????????????
    return ;
    ????????????}

    ????????????
    ????????????T?temp?
    = ?t[ 0 ];
    ????????????t[
    0 ]? = ?t[ 1 ];
    ????????????t[
    1 ]? = ?temp;
    ????????}

    ????}

    ????
    }



    上面程序的正確運行結果為:
    Mighty Mouse
    Mouse Mighty
    你答對了嘛?

    下面我們來分析一下:為什么會出現上面的運行結果?

    為分析這個問題,我們必須對程序中的數據在內存中的布局有一定了解。上面main程序中和String相關的變量共有3個,其布局可以用下圖所示:


    當調用swap(stra, strb)函數時,傳遞的是引用類型stra、strb的拷貝值,因此函數中任何對參數的改變都不會影響到stra和strb的值;而調用swap(strArr)時,傳遞的是strArr的拷貝值,程序中對參數的任何改變仍然不會影響到strArr的值,然而swap(T[] t)中改變的并不是strArr的值,而是strArr[0]和strArr[1]的值,也就是引用類型strArr所指向的對象的值,因而strArr[0]和strArr[1]的值發生了變化。

    從上面的分析,我們可以得出結論:對于引用類型,其實參數傳遞時仍然是按值傳遞的;當然,按引用傳遞也不是完全沒有道理,只是參考對象不是引用類型本身,而是引用類型所指向的對象。
    posted on 2007-01-05 20:34 lotusswan 閱讀(586) 評論(0)  編輯  收藏 所屬分類: Tiger學習筆記
    主站蜘蛛池模板: 亚洲AV无码日韩AV无码导航 | 国产精品亚洲精品爽爽| 免费国产草莓视频在线观看黄| 69视频在线观看免费| 久久精品亚洲综合| 久久青草91免费观看| 久久99国产亚洲精品观看| 国产免费AV片在线观看| 伊人久久综在合线亚洲2019| 香蕉成人免费看片视频app下载| 亚洲AV日韩AV天堂久久 | 亚洲人色大成年网站在线观看| 国产成人精品免费午夜app| 亚洲午夜电影一区二区三区| 欧美在线看片A免费观看| 亚洲JIZZJIZZ妇女| 亚洲国产成人久久综合碰| 香蕉免费看一区二区三区| 亚洲爆乳精品无码一区二区三区| 日韩免费人妻AV无码专区蜜桃 | 亚洲精品人成无码中文毛片 | 最近2019中文免费字幕在线观看| 久久亚洲精品成人| 成年女人喷潮毛片免费播放| 亚洲AV日韩AV一区二区三曲| 亚洲一区二区三区在线视频| 少妇人妻偷人精品免费视频| 亚洲综合色一区二区三区| 一本色道久久88综合亚洲精品高清| 国产成人AV免费观看| 亚洲国产韩国一区二区| 国产又黄又爽又猛的免费视频播放 | 在线a亚洲v天堂网2019无码| 在线观看免费视频资源| 亚洲第一街区偷拍街拍| 国产亚洲自拍一区| 国产情侣激情在线视频免费看| 色婷婷六月亚洲综合香蕉| 亚洲av无码不卡一区二区三区| 日韩欧美一区二区三区免费观看| 乱爱性全过程免费视频|