Java值傳遞機制

一、針對於方法內變量的賦值舉例

/**
 * Description:
 *
 * @author zygui
 * @date Created on 2020/6/25 19:21
 */
public class VarTest {
    public static void main(String[] args) {

        System.out.println("***********基本數據類型:****************");

        int m = 10;
        int n = m;
        System.out.println("m = " + m + ", n = " + n);  // 很簡單, m = 10, n = 10;

        n = 20;
        System.out.println("m = " + m + ", n = " + n);  // 很簡單, m = 10, n = 20;
}
public class VarTest2 {

        System.out.println("***********引用數據類型:****************");

        Order o1 = new Order();
        o1.orderId = 1001;
        Order o2 = o1; //賦值以後,o1和o2的地址值相同,都指向了堆空間中同一個對象實體。
        System.out.println("o1.orderId = " + o1.orderId + ", o2.orderId = " +o2.orderId); // 1001, 1001

        o2.orderId = 1002;
        // 因爲指向的是同一地址空間, 當o2修改該空間中的orderId後, o1的orderId也隨之改變
        System.out.println("o1.orderId = " + o1.orderId + ", o2.orderId = " +o2.orderId); // 1002, 1002

    }
}

class Order {
    int orderId;
}

二、針對於方法的參數概念

  • 形參:方法定義時,聲明的小括號內的參數
  • 實參:方法調用時,實際傳遞給形參的數據

三、Java中參數傳遞機制:值傳遞

規則:

  • 如果參數是基本數據類型,此時實參賦給形參的是實參真實存儲的數據值
  • 如果參數是引用數據類型,此時實參賦給形參的是實參存儲數據的地址值

推廣:

  • 如果變量是基本數據類型,此時賦值的是變量所保存的數據值。
  • 如果變量是引用數據類型,此時賦值的是變量所保存的數據的地址值。
傳遞基本數據類型
public class VarTest {
    public static void main(String[] args) {
        int m = 10;
        int n = 20;
        System.out.println("m = " + m + ", n = " + n);
        VarTest vt = new VarTest();
        vt.swap(m, n);
        System.out.println("m = " + m + ", n = " + n); // 10, 20;

    }

    public void swap(int m, int n){
        int temp = m;
        m = n;
        n = temp;
        // System.out.println("m = " + m + ", n = " + n); // 20, 10
    }
}

在這裏插入圖片描述

傳遞引用數據類型
public class VarTest {
    public static void main(String[] args) {
        Data data = new Data();
        data.m = 10;
        data.n = 20;
        System.out.println("m = " + data.m + ", n = " + data.n);

        // int temp = data.m;
        // data.m = data.n;
        // data.n = temp;
        // System.out.println("m = " + data.m + ", n = " + data.n); // 20, 10

        VarTest vt = new VarTest();
        vt.swap(data); // 傳的是data的地址值; 它們指向的是同一塊內存空間
        System.out.println("m = " + data.m + ", n = " + data.n);
    }

    public void swap(Data data) {
        int temp = data.m;
        data.m = data.n;
        data.n = temp;
        System.out.println("m = " + data.m + ", n = " + data.n); // 20, 10
    }
}

class Data {
    int m;
    int n;
}

在這裏插入圖片描述

練習

在這裏插入圖片描述
內存圖如下
在這裏插入圖片描述

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