Java傳值調用

來源:互聯網
上載者:User

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沒有發生變化。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.