要了解Java中參數傳遞的原理,首先你要先知道按值傳遞和按引用傳遞的區(qū)別。 按值傳遞表示方法接受的是調用者提供的值,按引用傳遞表示方法接受的是調用者提供的變量地址。一個方法可以修改傳遞引用所對應的變量值,而不能修改傳遞值調用所對應的變量值。而Java程序設計語言總是采用按值調用,也就是說,方法得到的是所有參數值的一個拷貝。下面我將舉一些實例來具體說明: #基本數據類型public static void main(String[] args) {
// TODO Auto-generated method stub
int a=10,b=20;
swap(a,b);
System.out.println(a+'-------'+b);
}
public static void swap(int a,int b) {
int temp=a;
a=b;
b=temp;
} 其結果為 原理相當于: 執(zhí)行swap之前: 執(zhí)行swap之后: 從圖中可以看出:執(zhí)行swap前后,實參ab并沒有改變。改變的只是形參ab,而形參ab在執(zhí)行完swap之后就被撤銷了(局部變量在方法執(zhí)行結束后被撤銷)。所以最后a=10,b=20; #類類型類類型直接傳遞public class scdn {
public static void main(String[] args) {
// TODO Auto-generated method stub
employee tom=new employee();
tom.setId(10);
employee jarry=new employee();
jarry.setId(20);
System.out.println(tom.getId()+'-------'+jarry.getId());
}
public static void swap(employee a,employee b) {
employee temp=a;
a=b;
b=temp;
}
}
class employee{
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}123456789101112131415161718192021222324252627282930123456789101112131415161718192021222324252627282930 結果為 其原理和上面差不多。 類類型通過方法傳遞public class scdn {
public static void main(String[] args) {
// TODO Auto-generated method stub
employee tom=new employee();
tom.setId(10);
employee jarry=new employee();
jarry.setId(20);
swap(tom, jarry);
System.out.println(tom.getId()+'-------'+jarry.getId());
}
public static void swap(employee a,employee b) {
int temp;
temp=a.getId();
a.setId(b.getId());
b.setId(temp);
}
}
class employee{
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
結果為: 執(zhí)行swap之前: 執(zhí)行swap之后: 為什么類類型通過這兩個不同swap方法之后結果會不同呢?這是因為第二個swap中實參tom和形參a一直指向的是同一個地址(x),jarry和b一直指向(y),所以最后修改形參可以改變實參的值。
|