程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java語言中的參數傳遞

Java語言中的參數傳遞

編輯:關於JAVA

在實際的開發過程中,方法調用是一種很常見的操作,在方法調用中,關於參數的處理可能很多進行實際開發的程序員都不一定理解的很清楚,下面系統的介紹一下Java語言中參數傳遞的規則,以及和參數傳遞相關的一些問題。

和其它程序設計語言類似,Java語言的參數傳遞也分為兩種:

1、按值傳遞(by value)

適用范圍:8種基本數據類型、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]);
  }
  }

按照上面的參數傳遞規則,該代碼的輸出結果應該是:5abc2。因為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]);
  }
}

這樣,程序的輸出結果就將是:10123  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的值也會發生改變,間接實現了返回值的效果。當然,在該示例代碼中,因為只返回一個參數,所以作用體現的不明顯,如果需要返回多個參數時,使用按址傳遞是一種不錯的主意。

因時間倉促,疏漏之處難免,請大家積極補充和指正。

出自:http://blog.csdn.net/Mailbomb/archive/2007/12/31/2006042.aspx

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved