青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
數(shù)據(jù)加載中……

關(guān)于Java的引用和函數(shù)參數(shù)傳遞

Java中沒有了指針,這有時(shí)給程序員帶來了些許不便。Java的語言設(shè)計(jì)者強(qiáng)調(diào),這種不便可以通過Java的引用特性得到彌補(bǔ)。即對(duì)于Java的任何對(duì)象,我們可以申明對(duì)象變量,但不產(chǎn)生實(shí)例,這樣,把該變量指向具有實(shí)際實(shí)例的對(duì)象,即可實(shí)現(xiàn)同一實(shí)例對(duì)象的多個(gè)變量引用,如:

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

y=x;

for(int i=0; i<y.length; i++) System.out.print(“   ”+y[i]);

則完成了通過y對(duì)x的引用。從這個(gè)實(shí)際效果看,y在這里就很象C語言中的指針了。只不過對(duì)于“指針”y我們不能進(jìn)行+-這類算數(shù)運(yùn)算,即Java的引用只能指向程序限定的能夠訪問的現(xiàn)存對(duì)象,所以Java的實(shí)現(xiàn)者認(rèn)為它是靈活同時(shí)也是安全的。

但對(duì)于C或者C++中能夠通過函數(shù)簡單實(shí)現(xiàn)的兩個(gè)數(shù)交換問題,即C++如下函數(shù):

void swap(int &x, int &y) { int t; t=x; x=y; y=t; }

Java中是否能夠?qū)崿F(xiàn)呢?

按照Java的規(guī)定,Java的函數(shù)參數(shù)在傳遞的時(shí)候有兩種方式。對(duì)于基本類型,如intdouble等作為函數(shù)參數(shù)傳遞時(shí),采取的是傳值方式。而對(duì)于對(duì)象,如數(shù)組、字符串等作為參數(shù)傳遞時(shí),采用的是引用方式,即此時(shí)在函數(shù)中對(duì)傳遞的對(duì)象的修改將完全影響原對(duì)象。那能否對(duì)于對(duì)象利用引用完成值的交換呢?下面的程序充分地演示了這個(gè)問題:

public class test {

  public static void main(String[] arg) {

    int x1[]={1,2,3},x2[]={3,2,1};

    swap(x1,x2);//采用swap函數(shù),即直接利用參數(shù)引用進(jìn)行交換

    System.out.print("swap->X1:\t"); printarr(x1);

    System.out.print("swap->X2:\t"); printarr(x2);

    swapArray(x1,x2);//采用swapArray函數(shù),利用對(duì)于對(duì)象的值的修改進(jìn)行交換

    System.out.print("swapArr->X1:\t"); printarr(x1);

System.out.print("swapArr->X2:\t"); printarr(x2);

Object t;

    t=x1; x1=x2; x2=(int[])t;//在非函數(shù)調(diào)用中直接利用引用進(jìn)行交換

    System.out.print("Tswap->X1:\t"); printarr(x1);

    System.out.print("Tswap->X2:\t"); printarr(x2);

  }

  public static void swap(Object x, Object y) {//直接利用參數(shù)引用交換

    Object t=x;

    x=y;

    y=t;

  }

  public static void swapArray(int x[], int y[]) {//對(duì)引用對(duì)象的值進(jìn)行修改完成交換

    if(x.length!=y.length) return;

    int t[]=x.clone();

    for(int i=0; i<x.length; i++) x[i]=y[i];

    for(int i=0; i<y.length; i++) y[i]=t[i];

  }

  public static void printarr(int x[]) {//打印數(shù)組

    for(int i=0; i<x.length; i++) System.out.print(x[i]+"  ");

    System.out.println();

  }

}

在函數(shù)swap中,我們直接利用參數(shù)進(jìn)行交換。在函數(shù)swapArray中,我們通過修改參數(shù)指向的兩個(gè)數(shù)組的值進(jìn)行交換。而在main函數(shù)沒有進(jìn)行函數(shù)參數(shù)傳遞的情況下,我們直接利用參數(shù)的引用進(jìn)行了一次交換。

程序的運(yùn)行結(jié)果如下:

swap->X1:     1  2  3 

swap->X2:     3  2  1 

swapArr->X1: 3  2  1 

swapArr->X2: 1  2  3 

Tswap->X1:   1  2  3 

Tswap->X2:   3  2  1 

從運(yùn)行結(jié)果我們可以清楚地看到,函數(shù)swap實(shí)際沒有完成交換,而函數(shù)swapArray和直接在main中利用引用進(jìn)行的交換是成功的。從這里我們可以得知,雖然Java的引用可以實(shí)現(xiàn)CC++的指針的類似的效果,這在主函數(shù)中的引用交換得到了證明。但是一但進(jìn)行了函數(shù)的參數(shù)傳遞,這種引用方式的交換便實(shí)效了。雖然它的交換方式和主函數(shù)中利用Object引用t進(jìn)行的交換方式相同。猜測其原因(因?yàn)槲也皇?span lang="EN-US">Java的實(shí)現(xiàn)者),只能說明,函數(shù)中的引用變量和主函數(shù)中調(diào)用的變量是不相同的。即在調(diào)用swap函數(shù)時(shí),雖然將x1的引用傳遞給了xx2傳遞給了yxy進(jìn)行了交換,但x1x2并沒有進(jìn)行交換。也就是說,在函數(shù)swap申明參數(shù)xy時(shí),實(shí)際另外真正的生成了與x1x2完全不相干的引用,只不過xy都同樣指向了x1x2罷了,即此時(shí),數(shù)組對(duì)象x1x2同時(shí)分別有兩個(gè)指針xx1yy1指向它們。這樣的結(jié)果當(dāng)然不能完成如CC++類似的交換。唯一的辦法是如swapArray函數(shù)中一樣,不要試圖交換,只能試圖修改參數(shù)所指向的兩個(gè)對(duì)象的值來達(dá)到交換的效果。

所以我得出的一個(gè)相關(guān)的結(jié)論是:Java永遠(yuǎn)也不能實(shí)現(xiàn)如CC++一樣的swap函數(shù)。

 

posted on 2009-07-24 12:09 肥仔 閱讀(1354) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Web-后臺(tái)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲人体大胆视频| 欧美色视频一区| 亚洲电影在线播放| 国模私拍视频一区| 欧美人与性动交α欧美精品济南到 | 欧美一区二区在线看| 性做久久久久久免费观看欧美| 亚洲午夜在线| 性欧美video另类hd性玩具| 亚洲欧美日韩精品久久久| 欧美一区二区三区视频| 美女视频一区免费观看| 欧美精品久久久久久久久老牛影院 | 欧美另类亚洲| 欧美成人中文字幕| 国产精品mv在线观看| 激情丁香综合| 国产精品99久久久久久人| 午夜激情亚洲| 欧美aaa级| aa日韩免费精品视频一| 欧美一区永久视频免费观看| 欧美不卡一卡二卡免费版| 国产精品久久久久久久久免费| 国内视频精品| 亚洲永久精品国产| 美女黄毛**国产精品啪啪| 在线中文字幕不卡| 免费成人av在线看| 国产日本欧美在线观看| a4yy欧美一区二区三区| 久久躁狠狠躁夜夜爽| 99精品视频免费在线观看| 久久久噜久噜久久综合| 国产精品国产馆在线真实露脸| 在线观看国产成人av片| 午夜精品成人在线| 亚洲激情网站免费观看| 欧美中文字幕在线播放| 国产精品久久激情| 日韩一级黄色大片| 欧美国产三区| 久久久一本精品99久久精品66| 国产精品青草综合久久久久99| 亚洲人成绝费网站色www| 久久久久久久久伊人| 亚洲一区三区在线观看| 久热精品在线视频| 夜夜夜精品看看| 欧美—级a级欧美特级ar全黄| 国产日韩欧美一区| 亚洲综合视频1区| 亚洲精品久久久久久久久久久 | 在线亚洲电影| 欧美国产视频在线观看| 久久久7777| 国产亚洲欧美日韩精品| 午夜精品亚洲| 这里只有精品在线播放| 欧美三级韩国三级日本三斤| 99精品久久久| 亚洲精品一区二区三区av| 牛牛精品成人免费视频| 一区二区三区在线免费视频| 久久久欧美一区二区| 欧美一区二区三区免费看 | aa级大片欧美三级| 国产精品久久77777| 亚洲欧美日韩在线一区| 亚洲免费在线视频| 国产精品免费看片| 久久精品国产精品亚洲| 欧美一区二区三区在线视频| 国产一区二区三区日韩欧美| 久久三级福利| 久久亚洲精品网站| 亚洲精品一区二| 亚洲精品久久久久久久久久久久久| 欧美极品影院| 亚洲欧美国产77777| 亚洲午夜久久久| 国产亚洲精品高潮| 开心色5月久久精品| 你懂的国产精品永久在线| 亚洲美女在线视频| 亚洲视频在线一区| 韩日成人av| 亚洲黄网站黄| 国产精自产拍久久久久久| 久久人人精品| 欧美高清视频在线| 性色av一区二区三区在线观看| 午夜亚洲影视| 日韩午夜在线视频| 性欧美暴力猛交另类hd| 亚洲精品欧美日韩专区| 亚洲欧美国产va在线影院| 亚洲国产精品第一区二区| 亚洲午夜激情网页| 亚洲黄色性网站| 亚洲一区二区在线看| 亚洲国产一区二区三区高清| 亚洲午夜在线视频| 亚洲激情图片小说视频| 亚洲综合视频一区| 亚洲精品中文字幕女同| 欧美一区二区视频97| 亚洲伊人久久综合| 免费人成精品欧美精品| 欧美在线亚洲| 欧美日韩国产欧| 在线综合亚洲| 黄色日韩网站视频| 亚洲免费黄色| 亚洲国产黄色片| 亚洲手机视频| 亚洲精品在线免费| 久久电影一区| 欧美一级黄色录像| 欧美视频免费在线| 亚洲欧洲精品一区二区三区| 亚洲国产欧美一区| 国产欧美高清| 亚洲一区国产视频| 99精品国产在热久久婷婷| 蜜月aⅴ免费一区二区三区| 久久久精品性| 国产女人水真多18毛片18精品视频| 亚洲人屁股眼子交8| 亚洲人体1000| 欧美成人免费在线观看| 免费在线亚洲欧美| 在线免费不卡视频| 欧美主播一区二区三区美女 久久精品人| 亚洲一区二区三区视频播放| 欧美日本簧片| 亚洲免费久久| 亚洲永久免费| 国产欧美日韩在线| 欧美在线播放一区| 久久人91精品久久久久久不卡| 国产曰批免费观看久久久| 香蕉乱码成人久久天堂爱免费| 午夜精品美女久久久久av福利| 国产精品第三页| 亚洲男人第一网站| 久久国产精品一区二区| 国产一区二区三区自拍 | 欧美激情精品久久久久久| 亚洲国产成人tv| 亚洲美女精品久久| 欧美日韩天堂| 一区二区三区.www| 久久aⅴ国产欧美74aaa| 狠久久av成人天堂| 蜜桃av一区二区三区| 欧美在线免费观看视频| 久久久蜜臀国产一区二区| 亚洲第一在线综合网站| 欧美国产激情| 亚洲一二区在线| 久久亚洲欧美国产精品乐播| 在线成人免费观看| 欧美老女人xx| 亚洲欧美激情一区二区| 蜜桃av一区二区在线观看| 亚洲精品视频中文字幕| 国产精品久久国产愉拍| 久久久久久噜噜噜久久久精品| 亚洲人成绝费网站色www| 亚洲永久网站| 一区二区视频欧美| 欧美日韩高清在线一区| 亚洲欧美一区二区视频| 亚洲大胆视频| 欧美在线精品一区| 亚洲精品中文字幕有码专区| 国产精品拍天天在线| 免费看成人av| 欧美一区二区成人| 国产日韩在线亚洲字幕中文| 欧美成人激情视频| 中文亚洲视频在线| 精品粉嫩aⅴ一区二区三区四区| 欧美精品免费播放| 久久精品一区蜜桃臀影院| 一区二区三区四区国产| 欧美成人国产| 欧美制服丝袜第一页| 99视频+国产日韩欧美| 激情欧美一区二区三区| 国产精品超碰97尤物18| 欧美成人精品激情在线观看| 午夜在线观看免费一区| 亚洲免费电影在线观看| 欧美风情在线| 卡一卡二国产精品| 久久精品国产欧美亚洲人人爽 | 欧美在线精品一区| 亚洲校园激情|