2008/10/25

[ Java ] About Call By Value

Java 傳值呼叫 (Call By Value) 範例:

public class JCallByValue {
   static void Change(int x, int y){
       int t;
       t = x;
       x = y;
       y = t;
       System.out.println("Change Method:");
       System.out.println("x= "+x+"     y="+y);
   }
 
   public static void main(String[] args){
       int x = 3, y = 5;
       System.out.println("main Method -- Before Call Change() Method:");
       System.out.println("x= "+x+"    y="+y);
       Change(x,y);
       System.out.println("main Method -- After Call Change() Method:");
       System.out.println("x= "+x+"    y="+y);
   }
}

執行結果:

main Method -- Before Call Change() Method:
x= 3 y=5
Change Method:
x= 5 y=3
main Method -- After Call Change() Method:
x= 3 y=5

說明:

雖然 Change() Method 內的 x,y 變數與 main 主程式中的 x,y 相同,但其所佔有的記憶體位置不同所以主程式在呼叫完 Change() 這個方法之後 x,y 的值並不會改變。Java 的 boolean、char、byte、short、int、long、float、double等資料型別的『變數』用於方法中的參數皆屬傳值呼叫,而 Array、Object...等的參數則為傳參考值呼叫 (Call By Reference) 因為它們在記憶中會佔用相同的記憶體。

0 意見: