例子:基本數據類型傳參和引用數據類型傳參的區別

代碼:

public class Test {
    public static void main(String[] args) {
        int a = 20;
        method1(a);
        System.out.println("int..." + a);

        Person p = new Person("張三");
        method2(p);
        System.out.println("Person..." + p);

        String str = "A";
        method3(str);
        System.out.println("String..." + str);
    }
    public static void method1(int a){
        a = 10;
    }
    public static void method2(Person p){
        p.setName("李四");
    }
    public static void method3(String str){
        str = "B";
    }
}

結果:
在這裏插入圖片描述

解釋int類型沒有被改變的原因

傳參的時候傳過去的是一個變量副本,方法內改變的是變量副本的值,而不是真正a的值,然後再根據就近原則,使用的就是 int a = 20

解釋Person類型被改變的原因

在這裏插入圖片描述
雖然最後還是就近原則,使用main方法中的p,但是它只是引用的一個地址,真正的值以及被改變了。

解釋String類型沒有被改變的原因

首先要知道常量池中的字符串一旦被創建是無法被改變的。
在這裏插入圖片描述

最後還是因爲就近原則,選用main方法中的str的值輸出。

總結:基本數據類型作爲方法參數,傳遞的是變量副本,形參改變,實際值不會改變,所以原樣輸出。引用型數據類型作爲方法的形參傳遞,傳遞的是引用地址,形參改變,實際值也會跟着改變。最後一種就是字符串,雖然屬於引用型數據類型,但是因爲字符串常量池的原因,字符串一旦被創建就不可改變的概念,給這個形參字符串賦值就相當於又創建了一個新的字符串,與原來的字符串已經沒有啥關係了,所以原來的字符串指向的還是字符串A,最終根據作用域輸出的還是A。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章