Java語言中的參數傳遞

來源:互聯網
上載者:User
 

Java語言中的參數傳遞作者:陳躍峰出自:http://blog.csdn.net/mailbomb          在實際的開發過程中,方法調用是一種很常見的操作,在方法調用中,關於參數的處理可能很多進行實際開發的程式員都不一定理解的很清楚,下面系統的介紹一下Java語言中參數傳遞的規則,以及和參數傳遞相關的一些問題。         和其它程式設計語言類似,Java語言的參數傳遞也分為兩種:1、 按值傳遞(by value)適用範圍:8種基礎資料型別 (Elementary Data Type)、String對象特點:在記憶體中複製一份資料,把複製後的資料傳遞到方法內部作用:在方法內部改變參數的值,外部資料不會跟著發生改變2、 按址傳遞(by address)適用範圍:數組、除String以外的其他所有類型的對象特點:將對象的地址傳遞到方法內部作用:在方法內部修改對象的內容,外部資料也會跟著發生改變基礎範例程式碼:    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]);    }       }         按照上面的參數路由規則,該代碼的輸出結果應該是:5 abc 2。因為int類型是按值傳遞,所以把參數m傳遞到方法t1時,相當於又複製了一份m的值,在方法t 1內部修改的是複製後的值,所以m的值不變,s1的輸出和m類似。而arr是數組,屬於按址傳遞,也就是把arr的地址傳遞到了方法t3內部,在方法t3內部修改數組中的值時,原來的內容也發生改變。         以上特性是Java語言中的規定,在文法上無法指定參數傳遞是按值傳遞還是按址傳遞,但是可以通過下面的變換實現:1、 對於按值傳遞的參數,如果需要在方法調用以後修改參數的值,可以利用傳回值來實現。2、 對於按值傳遞的參數,如果需要在方法內部修改時原來的參數不改變,則可以在方法內部重新建立該對象實現。範例程式碼如下: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){        //建立新的數組並賦值        int[] newArray = new int[array.length];        //資料拷貝       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]);    }    }這樣,程式的輸出結果就將是:10 123   1。在實際的程式開發中,可以根據需要使用類似的結構來進行實現。         下面再介紹一個參數傳遞的常見應用,利用參數傳遞實現傳回值,這樣的功能在IO類設計的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方法內部修改了數組的值以後,外部數組a的值也會發生改變,間接實現了傳回值的效果。當然,在該範例程式碼中,因為只返回一個參數,所以作用體現的不明顯,如果需要返回多個參數時,使用按址傳遞是一種不錯的主意。    因時間倉促,疏漏之處難免,請大家積極補充和指正。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.