1 基本類型作為參數,
當方法參數為基本類型時,它是通過傳值方式進行調用的,這種傳遞的特點是
(1) 它所傳遞的實參的值是一個副本
(2) 單向傳遞,方法內部可以修改形參的值,但這種修改不會影響到對應的實參
直觀來看,傳值過程相當於一賦值的過程,實參是右值,形參是左值,它們發生聯絡只在調用的那一時刻,以後二者再無聯絡。
2 複合類型作為參數
如果實參是一個類的對象,那麼在調用相應的方法時,系統會將該對象的地址值傳遞給形參。
在java中雖然沒有指標這一概念,程式員也不需要掌握它,但在系統內部,仍然存在指標。
由於c++中提供了傳值調用和應用調用兩種情況,於是有些程式員也認為ijava的對象採用的是引用傳遞,這其實是一種誤解。java採用的是傳地址值的調用方式。在某些情況下雖然和引用調用效果相同,但在另外一些情況下還是可以看到兩者的區別。
例如
class onlyTest{
private int x=0;
public void setX(int ix){
x=ix;
}
public int getX(){
return x;
}
}
public class BooleanTest {
public void swap( onlyTest one, onlyTest two){
onlyTest temp;
temp=one;
one=two;
two=temp;
}
public void showDiffer(){
onlyTest ox=new onlyTest();
onlyTest oy=new onlyTest();
ox.setX(100);
oy.setX(200);
System.out.println(" 調用swap方法之前的值");
System.out.println(" ox.x="+ox.getX()+", oy.x="+oy.getX());
swap(ox,oy);
System.out.println(" 調用swap方法之後的值");
System.out.println(" ox.x="+ox.getX()+", oy.x="+oy.getX());
}
public static void main(String args[]){
BooleanTest va=new BooleanTest();
va.showDiffer();
}
}
在方法swap()中形參是兩個onlyTest的對象,如果是引用調用那麼交換這兩個對象的值,將對實參ox和oy產生影響,程式實際運行後輸出的結果如下
調用swap方法之前的值
ox.x=100, oy.x=200
調用swap方法之後的值
ox.x=100, oy.x=200
由於Java使用的是地址值傳值的方式,所以在參數傳遞時把地址值由ox傳給one,oy傳給two.此時對於ox和one指向記憶體中的同一地區,oy和two指向同一地區,交換中one和two的地址發生轉化,但是ox和oy沒有發生變化。