java中參數傳遞機制---形參和實參


1.形參:用來接收調用該方法時傳遞的參數。只有在被調用的時候才分配內存空間,一旦調用結束,就釋放內存空間。因此僅僅在方法內有效。

1  public void swap(int a, int b) { 2         int temp = a; 3         a = b; 4         b = temp; 5         System.out.println("a:" + a + " b:" + b); 6  } 7 
8 這里邊的a,b就是形參,temp是一個局部變量,方法結束,在棧空間中就會被銷毀

 

2.實參:傳遞給被調用方法的值,預先創建並賦予確定值。

1 調用上面的 2 swap(1,2); 3 其中1和2就是實際的參數值,就叫實參

 

3.傳值調用:傳值調用中傳遞的參數為基本數據類型,參數視為形參。

 1 public class TestArgsTransform {  2     public static void main(String[] args) {  3         int i = 10;  4         int j = 5;  5         TestArgsTransform tt = new TestArgsTransform();  6         System.out.println("i:" + i + " j:" + j);  7  tt.swap(i, j);  8         System.out.println("i:" + i + " j:" + j);  9 
10 
11  } 12 
13     public void swap(int a, int b) { 14         int temp = a; 15         a = b; 16         b = temp; 17         System.out.println("a:" + a + " b:" + b); 18  } 19 
20 
21 } 22 這里我們寫了一個基本的數據類型,實現兩個int型數據交換的方法,並且在main()方法中調用,然而結果卻並不是我們想要的

運行結果如下圖所示:

就是因為基本數據類型是屬於傳值調用,當我們要實現交換時,方法內可以完成交換,只是實參進行了交換,方法結束,棧空間中就會銷毀swap()方法內的局部變量,所以當調用swap()時,最終值還是實參的初始化值,並沒有被修改。值改變作用到了形參,而不會到實參

4.傳引用調用:傳引用調用中,如果傳遞的參數是引用數據類型,參數視為實參。在調用的過程中,將實參的地址傳遞給了形參,形參上的改變都發生在實參上。

 1 package com.argstransform;  2 //參數傳遞:  3 //形參:方法聲明時,方法小括號內的參數  4 //實參: 調用方法時,實際傳入的參數值  5 
 6 //java中傳遞值得機制:  7 //形參是基本數據類型的: 將實參的值傳遞給實參的基本數據類型的變量  8 //形參是引用數據類型的: 將實參的引用類型的值(即在堆空間中生成的首地址的值)傳遞給形參的引用類型的變量
 9 
10 public class TestDemo1 { 11     public static void main(String[] args) { 12         TestDemo1 td = new TestDemo1(); 13         Data data = new Data(); 14         System.out.println("data.i:"+data.i+" data.j:"+data.j); 15         //調用
16  td.swap(data); 17         System.out.println("data.i:"+data.i+" data.j:"+data.j); 18 
19  } 20 
21     public void swap(Data data) { 22         int temp = data.i; 23         data.i = data.j; 24         data.j = temp; 25  } 26 } 27 
28 class Data { 29     int i = 10; 30     int j = 5; 31 }
//形參部分直接傳進去了一個對象,相當於堆空間的首地址值得引用

運行結果:

 

 總結:

1.java的基本數據類型是傳值調用,對象引用類型是傳引用。

2.當傳值調用時,改變的是形參的值,並沒有改變實參的值,實參的值可以傳遞給形參,但是,這個傳遞是單向的,形參不能傳遞回實參。

3.當引用調用時,如果參數是對象,無論對對象做了何種操作,都不會改變實參對象的引用,但是如果改變了對象的內容,就會改變實參對象的內容。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM