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

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

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

    lotusswan

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

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

    /**
    ?*?@(#)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
    你答對了嘛?

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

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


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

    從上面的分析,我們可以得出結論:對于引用類型,其實參數(shù)傳遞時仍然是按值傳遞的;當然,按引用傳遞也不是完全沒有道理,只是參考對象不是引用類型本身,而是引用類型所指向的對象。
    posted on 2007-01-05 20:34 lotusswan 閱讀(586) 評論(0)  編輯  收藏 所屬分類: Tiger學習筆記
    主站蜘蛛池模板: 久久久久国色av免费看| 久久精品成人免费观看97| 亚州免费一级毛片| 亚洲av永久无码精品秋霞电影影院| 一区二区三区免费视频播放器| 国产a不卡片精品免费观看| 亚洲国产午夜精品理论片在线播放 | 成全影视免费观看大全二| 亚洲中文字幕人成乱码| 亚洲一级毛片免费在线观看| 亚洲日本国产乱码va在线观看| 成人免费午夜视频| 中文字幕亚洲码在线| 日韩成人免费aa在线看| 无码天堂va亚洲va在线va| 亚洲免费日韩无码系列| 在线看片免费人成视频播| 久久国产亚洲高清观看| 野花高清在线观看免费完整版中文| 亚洲无人区码一二三码区别图片| 国产乱弄免费视频| A国产一区二区免费入口| 久久精品蜜芽亚洲国产AV| 9久9久女女免费精品视频在线观看 | 最好2018中文免费视频| 黑人精品videos亚洲人| 91视频免费网址| 亚洲色图综合在线| 美女视频黄a视频全免费网站色窝| 亚洲理论片在线观看| 日韩免费视频播放| 视频免费在线观看| 亚洲AV无码久久久久网站蜜桃| 免费国产成人午夜电影| 免费视频精品一区二区三区 | 中文字幕免费在线| 国产亚洲欧美在线观看| 婷婷精品国产亚洲AV麻豆不片 | 亚洲精品无码午夜福利中文字幕 | 美女视频黄a视频全免费网站色 | 永久免费av无码网站韩国毛片|