Java傳參------基本數據類型和引用數據類型作爲參數的區別(值傳遞)

Java 傳參的方法---值傳遞


Java 使用按值傳遞的方式將實參傳遞給方法。同時傳遞基本數據類型變量的值與傳遞引用數據類型的值有很大的不同。接下來我將舉例說明。

 

java傳參過程:

調用方法時,把實參傳遞給形參,在方法內部使用形參(實參 ——>形參 傳的永遠是地址)

基本數據類型包括:整型、浮點型、字符型、布爾型

引用數據類型包括:接口、類、數組

基本數據類型按值傳參:傳的是就是常量本身,而常量在常量池中有固有的地址,所以實質上基本數據類型傳參傳的是就是常量在常量池中的地址,

引用數據類型按值傳參:傳的是對象的值,而對象的值就是地址,所以實質上引用數據類型傳參傳的就是對象在堆內存中的地址

接下來我會舉例說明:
class test{
    public static void main(String[] args){
        int c=3;
        int d=7;
        System.out.println("交換前"+c+","+d);
        swap(c,d);
        System.out.println("swap交換後"+c+","+d);
        int [] a = {3,7};
        System.out.println("交換前"+a[0]+","+a[1]);
        swap(a[0],a[1]);
        System.out.println("swap交換後"+a[0]+","+a[1]);
        System.out.println("交換前"+a[0]+","+a[1]);
        swapArr(a);
        System.out.println("swapArr交換後"+a[0]+","+a[1]);
    }
    public static void swapArr(int[] array){//參數爲引用數據類型
        int temp = array[0];
        array[0] = array[1];
        array[1] = temp;
    }
    public static void swap(int n1, int n2){//參數爲基本數據類型
        int temp = n1;
        n1 = n2;
        n2 =temp;
    }
}
 
代碼1-6行:(基本數據類型傳參)
 
 
綜上所述,在主函數中並沒有執行交換c,d的操作,他只是在swap方法中將n1,n2的值交換,不影響主函數中c,d的值,所以輸出值不變仍爲3,7
 
代碼7-10行:(基本數據類型傳參)
 
 
理由同上,即使此時main函數中定義的是引用數據類型數組,它的值也不發生變換的原因是 swap方法的參數列表中定義的是基本數據類型,所以此時交換也只是交換了swap方法中n1,n2的值,不影響主函數中c,d的值,所以輸出值不變仍爲3,7
 
代碼11-14行:(引用數據類型傳參)
 
 
因爲方法中的數組和main函數中的數組始終指向堆中數組a的地址,即圖中④⑤所示,所以當堆中數組a[0],a[1]的值發生交換時,main函數中a[0],a[1]也隨之變化,所以輸出值爲7,3
 

總結:

基本數據類型:你買了一瓶水a(形參),你朋友也買了一瓶水b(實參),你把你的水喝掉了,並不影響你朋友瓶子裏的水,即當使用基本數據類型作爲方法的形參時,在方法體中對形參的修改不會影響到實參的數值  

引用數據類型:你和你朋友共同買了一瓶水(這瓶水既扮演了形參又扮演了實參),你把水喝掉了,那你跟你朋友就都沒水了,即當使用引用數據類型作爲方法的形參時,若在方法體中修改形參指向的數據內容(水的多少),則會對實參變量的數值產生影響,因爲形參變量和實參變量共享同一塊堆區; 當你把水喝掉後,你朋友並沒有喝水的意思,而是想吃蘋果(形參變量的指向,由原來的喝水變爲吃蘋果),此時他吃蘋果並不影響你喝水,即當使用引用數據類型作爲方法的形參時,若在方法體中修改形參變量的指向,此時不會對實參變量的數值產生影響,因此形參變量和實參變量分別指向不同的堆區;

 

發佈了16 篇原創文章 · 獲贊 25 · 訪問量 3143
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章