- 相關(guān)推薦
詳解Java語(yǔ)言中的參數傳遞
導語(yǔ):和其它程序設計語(yǔ)言類(lèi)似,Java語(yǔ)言的參數傳遞也分為兩種,下面就由小編為大家介紹一下詳解Java語(yǔ)言中的參數傳遞,希望對大家有所幫助!
1.按值傳遞(by value)
適用范圍:8種基本數據類(lèi)型、String對象
特點(diǎn):在內存中復制一份數據,把復制后的數據傳遞到方法內部
作用:在方法內部改變參數的值,外部數據不會(huì )跟著(zhù)發(fā)生改變
2.按址傳遞(by address)
適用范圍:數組、除String以外的其他所有類(lèi)型的對象
特點(diǎn):將對象的地址傳遞到方法內部
作用:在方法內部修改對象的內容,外部數據也會(huì )跟著(zhù)發(fā)生改變
基礎示例代碼:
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);
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類(lèi)型是按值傳遞,所以把參數m傳遞到方法t1時(shí),相當于又復制了一份m的值,在方法t1內部修改的是復制后的值,所以m的值不變,s1的輸出和m類(lèi)似。而arr是數組,屬于按址傳遞,也就是把arr的地址傳遞到了方法t3內部,在方法t3內部修改數組中的值時(shí),原來(lái)的內容也發(fā)生改變。|||
以上特性是Java語(yǔ)言中的規定,在語(yǔ)法上無(wú)法指定參數傳遞是按值傳遞還是按址傳遞,但是可以通過(guò)下面的變換實(shí)現:
1.對于按值傳遞的參數,如果需要在方法調用以后修改參數的值,可以利用返回值來(lái)實(shí)現;對于按值傳遞的參數,如果需要在方法內部修改時(shí)原來(lái)的參數不改變,則可以在方法內部重新創(chuàng )建該對象實(shí)現。
示例代碼
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 )建新的數組并賦值
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.
在實(shí)際的程序開(kāi)發(fā)中,可以根據需要使用類(lèi)似的結構來(lái)進(jìn)行實(shí)現。
下面再介紹一個(gè)參數傳遞的常見(jiàn)應用,利用參數傳遞實(shí)現返回值,這樣的功能在IO類(lèi)設計的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的值也會(huì )發(fā)生改變,間接實(shí)現了返回值的效果。當然,在該示例代碼中,因為只返回一個(gè)參數,所以作用體現的不明顯,如果需要返回多個(gè)參數時(shí),使用按址傳遞是一種不錯的主意。
【詳解Java語(yǔ)言中的參數傳遞】相關(guān)文章:
Java語(yǔ)言中的流程控制07-09
java jar 命令行參數06-04
Java基礎知識詳解09-02
ASP 游標參數詳解記錄集07-21
筆記本SDR內存參數詳解05-18
java命令行參數解析201608-12
Java命令參數說(shuō)明大全10-17
2016年java編譯命令詳解09-27