java中的形參和實參


java中向方法傳遞參數是,是將參數的副本傳遞進去,即方法運行時會被分配一塊內存區域保存一個參數值的copy,修改副本值,對原參數並沒有影響。

要理解形參和實參,並在編碼中避免一些必要的錯誤,需要弄清兩個概念。

1、什么是形參和實參

2、方法調用時參數傳遞的過程

3、值傳遞和引用傳遞

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

public class ArgumentsTest {
    public static void main(String[] args){
       Emp empA = new Emp("ke",22);
       int num = 22;
        apply(empA);
        System.out.println(empA);
        apply2(num);
        System.out.println(num);

    }

    public static void apply(Emp emp){
        emp = new Emp("li",77);
    }

    public static void apply2(int num){
        num = 33;
    }

    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    static class Emp{
        private String name;
        private int age;

    }
}

 




首先什么是形參什么是實參?

在上述代碼中,apply方法的參數emp,就是形參,形式參數,它代表實際參數來參與方法的邏輯;而實參就是在調用方法時,向方法傳遞的參數值,即main方法中empA。

在方法運行時參數是如何傳遞的呢?

首先,每個變量都會在內存中對應一個內存空間,用來存放參數值。而在方法運行時,虛擬機會在棧中創建內存空間保存一個實參的副本,該內存空間會在方法調用結束時銷毀,該對副本的修改不會影響原參數的值。

值傳遞和引用傳遞?

在java中有兩種數據類型,基本類型和引用類型。當變量是基本類型是,變量對應的內存空間保存的變量值,如上述代碼中num保存22;當變量是引用類型時,內存中保存的是實際對象在堆中的地址。

而在方法調用時,傳遞的都是變量對應內存中的值,不同的是基本類型參數傳遞值給方法,引用類型參數傳遞對象內存地址給方法。

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

運行上述代碼:

結果:

ArgumentsTest.Emp(name=ke, age=22)
22

原參數值並沒有被改變。

 

引用類型參數被改變值的情況

改變apply方法的邏輯:

    public static void apply(Emp emp){
        emp.setName("li");
        emp.setAge(44);
    }

結果:

ArgumentsTest.Emp(name=li, age=44)

原參數被改變了,為什么。

因為,方法中的參數雖然是原參數的副本,但是實例對象在堆中的數據只有一份,如果直接去修改對象的屬性值,就可以修改原參數值了。

類似的,對數組,可以修改單個數組元素的值,也是有效的。

對於包裝類,可以通過反射修改內部的value,可以達到相同的效果。


免責聲明!

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



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