當前位置:才華齋>計算機>java語言>

詳解Java語言中的引數傳遞大綱

java語言 閱讀(2.54W)

和其它程式設計語言類似,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;

1(m);

tln(m);

String s1 = "abc";

t2(s1);

tln(s1);

int arr = {1,2,3,4};

t3(arr);

tln(arr[0]);

}

}

按照上面的引數傳遞規則,該程式碼的輸出結果應該是:5 abc 2.因為int型別是按值傳遞,所以把引數m傳遞到方法t1時,相當於又複製了一份m的值,在方法t1內部修改的是複製後的值,所以m的值不變,s1的輸出和m類似。而arr是陣列,屬於按址傳遞,也就是把arr的地址傳遞到了方法t3內部,在方法t3內部修改陣列中的值時,原來的內容也發生改變。|||

以上特性是Java語言中的`規定,在語法上無法指定引數傳遞是按值傳遞還是按址傳遞,但是可以通過下面的變換實現:

  1.對於按值傳遞的引數,如果需要在方法呼叫以後修改引數的值,可以利用返回值來實現;對於按值傳遞的引數,如果需要在方法內部修改時原來的引數不改變,則可以在方法內部重新建立該物件實現。

示例程式碼

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[th];

//資料拷貝

ycopy(array,0,newArray,0,th);

newArray[0] = 2;

}

public static void main(String args){

int m = 5;

//重新賦值

m = t1(m);

tln(m);

String s1 = "abc";

//重新賦值

s1 = t2(s1);

tln(s1);

int arr = {1,2,3,4};

t3(arr);

tln(arr[0]);

}

}

這樣,程式的輸出結果就將是:10 123 1.

在實際的程式開發中,可以根據需要使用類似的結構來進行實現。

下面再介紹一個引數傳遞的常見應用,利用引數傳遞實現返回值,這樣的功能在IO類設計的read方法中大量使用。

  示例程式碼

public class Test3{

public static void initArray(int array){

for(int i = 0;i < th;i++){

array[i] = i;

}

}

public static void main(String args){

int a = new int[10];

initArray(a);

for(int i = 0;i < th;i++){

tln(a[i]);

}

}

}

在該示例程式碼中,在initArray方法內部修改了陣列的值以後,外部陣列a的值也會發生改變,間接實現了返回值的效果。當然,在該示例程式碼中,因為只返回一個引數,所以作用體現的不明顯,如果需要返回多個引數時,使用按址傳遞是一種不錯的主意。