按照上面的參數(shù)傳遞規(guī)則,該代碼的輸出結(jié)果應(yīng)該是:5 abc 2。因?yàn)閕nt類型是按值傳遞,所以把參數(shù)m傳遞到方法t1時(shí),相當(dāng)于又復(fù)制了一份m的值,在方法t1內(nèi)部修改的是復(fù)制后的值,所以m的值不變,s1的輸出和m類似。而arr是數(shù)組,屬于按址傳遞,也就是把a(bǔ)rr的地址傳遞到了方法t3內(nèi)部,在方法t3內(nèi)部修改數(shù)組中的值時(shí),原來的內(nèi)容也發(fā)生改變。
以上特性是Java語言中的規(guī)定,在語法上無法指定參數(shù)傳遞是按值傳遞還是按址傳遞,但是可以通過下面的變換實(shí)現(xiàn):
1.對于按值傳遞的參數(shù),如果需要在方法調(diào)用以后修改參數(shù)的值,可以利用返回值來實(shí)現(xiàn);
2.對于按值傳遞的參數(shù),如果需要在方法內(nèi)部修改時(shí)原來的參數(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)。
下面再介紹一個(gè)參數(shù)傳遞的常見應(yīng)用,利用參數(shù)傳遞實(shí)現(xiàn)返回值,這樣的功能在IO類設(shè)計(jì)的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)橹环祷匾粋(gè)參數(shù),所以作用體現(xiàn)的不明顯,如果需要返回多個(gè)參數(shù)時(shí),使用按址傳遞是一種不錯(cuò)的主意。
相關(guān)推薦:2009年4月計(jì)算機(jī)等級二級考試VF程序設(shè)計(jì)輔導(dǎo)北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |