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

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

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

    Mark's Java Blog
    MyEclipse, Java EE, Spring, Struts, Hibernate, JPA, SWT, Swing, AJAX, JavaScript,SOA
    在實(shí)際的開發(fā)過程中,方法調(diào)用是一種很常見的操作,在方法調(diào)用中,關(guān)于參數(shù)的處理可能很多進(jìn)行實(shí)際開發(fā)的程序員都不一定理解的很清楚,下面系統(tǒng)的介紹一下Java語言中參數(shù)傳遞的規(guī)則,以及和參數(shù)傳遞相關(guān)的一些問題。
             和其它程序設(shè)計語言類似,Java語言的參數(shù)傳遞也分為兩種:
    1、 按值傳遞(by value)
    適用范圍:8種基本數(shù)據(jù)類型、String對象
    特點(diǎn):在內(nèi)存中復(fù)制一份數(shù)據(jù),把復(fù)制后的數(shù)據(jù)傳遞到方法內(nèi)部
    作用:在方法內(nèi)部改變參數(shù)的值,外部數(shù)據(jù)不會跟著發(fā)生改變
    2、 按址傳遞(by address)
    適用范圍:數(shù)組、除String以外的其他所有類型的對象
    特點(diǎn):將對象的地址傳遞到方法內(nèi)部
    作用:在方法內(nèi)部修改對象的內(nèi)容,外部數(shù)據(jù)也會跟著發(fā)生改變
    基礎(chǔ)示例代碼:
        public class Test1{
        public static void t1(int n){
            n = 10;
        }
        public static void t2(String s){
                   s = "123";
        }
        public static void t3(int[] array){
            array[0] = 2;
        }
        public static void main(String[] args){
               int m = 5;
            t1(m);
            System.out.println(m);
            String s1 = "abc";
            t2(s1);
            System.out.println(s1);
               int[] arr = {1,2,3,4};
            t3(arr);
            System.out.println(arr[0]);
        }   
       }
             按照上面的參數(shù)傳遞規(guī)則,該代碼的輸出結(jié)果應(yīng)該是:5 abc 2。因?yàn)閕nt類型是按值傳遞,所以把參數(shù)m傳遞到方法t1時,相當(dāng)于又復(fù)制了一份m的值,在方法t 1內(nèi)部修改的是復(fù)制后的值,所以m的值不變,s1的輸出和m類似。而arr是數(shù)組,屬于按址傳遞,也就是把a(bǔ)rr的地址傳遞到了方法t3內(nèi)部,在方法t3內(nèi)部修改數(shù)組中的值時,原來的內(nèi)容也發(fā)生改變。
             以上特性是Java語言中的規(guī)定,在語法上無法指定參數(shù)傳遞是按值傳遞還是按址傳遞,但是可以通過下面的變換實(shí)現(xiàn):
    1、 對于按值傳遞的參數(shù),如果需要在方法調(diào)用以后修改參數(shù)的值,可以利用返回值來實(shí)現(xiàn)。
    2、 對于按值傳遞的參數(shù),如果需要在方法內(nèi)部修改時原來的參數(shù)不改變,則可以在方法內(nèi)部重新創(chuàng)建該對象實(shí)現(xiàn)。
    示例代碼如下:
    public class Test2{
        public static int t1(int n){
            n = 10;
            return n;
        }
        public static String t2(String s){
                      s = "123";
                      return  s;
        }
        public static void t3(int[] array){
            //創(chuàng)建新的數(shù)組并賦值
            int[] newArray = new int[array.length];
            //數(shù)據(jù)拷貝
           System.arraycopy(array,0,newArray,0,array.length);
            newArray[0] = 2;
        }
        public static void main(String[] args){
                      int m = 5;
            //重新賦值
            m = t1(m);
            System.out.println(m);
            String s1 = "abc";
            //重新賦值
            s1 = t2(s1);
            System.out.println(s1);
                      int[] arr = {1,2,3,4};
            t3(arr);
            System.out.println(arr[0]);
        }   
    }
    這樣,程序的輸出結(jié)果就將是:10 123   1
    在實(shí)際的程序開發(fā)中,可以根據(jù)需要使用類似的結(jié)構(gòu)來進(jìn)行實(shí)現(xiàn)。
             下面再介紹一個參數(shù)傳遞的常見應(yīng)用,利用參數(shù)傳遞實(shí)現(xiàn)返回值,這樣的功能在IO類設(shè)計的read方法中大量使用。示例代碼如下:
    public class Test3{
        public static void initArray(int[] array){
                      for(int i = 0;i < array.length;i++){
                                array[i] = i;
            }
        }
        public static void main(String[] args){
                      int[] a = new int[10];
            initArray(a);
            for(int i = 0;i < a.length;i++){
                                System.out.println(a[i]);
            }
        }
    }
             在該示例代碼中,在initArray方法內(nèi)部修改了數(shù)組的值以后,外部數(shù)組a的值也會發(fā)生改變,間接實(shí)現(xiàn)了返回值的效果。當(dāng)然,在該示例代碼中,因?yàn)橹环祷匾粋€參數(shù),所以作用體現(xiàn)的不明顯,如果需要返回多個參數(shù)時,使用按址傳遞是一種不錯的主意。
        因時間倉促,疏漏之處難免,請大家積極補(bǔ)充和指正。
    posted on 2008-04-18 17:01 Mark 閱讀(247) 評論(0)  編輯  收藏 所屬分類: Java SE
     
    主站蜘蛛池模板: 久久精品亚洲一区二区三区浴池| 黄页免费的网站勿入免费直接进入| 好看的电影网站亚洲一区| 亚在线观看免费视频入口| 中文字幕亚洲无线码| 中文字幕在线免费观看| 亚洲丁香婷婷综合久久| 最近最好的中文字幕2019免费| 美女视频黄频a免费| 亚洲AⅤ无码一区二区三区在线 | 巨胸喷奶水视频www网免费| 久久精品国产亚洲AV无码麻豆| 午夜视频在线在免费| 13小箩利洗澡无码视频网站免费 | 亚洲欧美日韩综合久久久久| 无人在线观看完整免费版视频| 麻豆91免费视频| 亚洲成人免费在线观看| 亚洲一区二区三区免费| 在线永久免费的视频草莓| 免费人成在线观看播放a| 亚洲综合图色40p| 午夜网站免费版在线观看| a级毛片在线免费| 亚洲国产精品lv| 一级女人18毛片免费| 中国好声音第二季免费播放| 亚洲av福利无码无一区二区| 免费观看午夜在线欧差毛片| 99爱在线精品视频免费观看9| 亚洲精品美女网站| 亚洲伊人tv综合网色| 免费在线一级毛片| 国产在线精品免费aaa片| 亚洲小说图片视频| 亚洲成AV人片在线观看WWW| 国产乱子精品免费视观看片| 三级毛片在线免费观看| 少妇亚洲免费精品| 国产精品亚洲专区在线播放| 中文字幕无码亚洲欧洲日韩|