按值傳遞

N1ce2cu發表於2024-07-14
  • 值傳遞:當一個引數按照值的方式在兩個方法之間傳遞時,呼叫者和被呼叫者其實是用的兩個不同的變數——被呼叫者中的變數(原始值)是呼叫者中變數的一份複製,對它們當中的任何一個變數修改都不會影響到另外一個變數

  • 引用傳遞: 當一個引數按照引用傳遞的方式在兩個方法之間傳遞時,呼叫者和被呼叫者其實用的是同一個變數,當該變數被修改時,雙方都是可見的

public static void main(String[] args) {
    // age 是基本型別,值就儲存在變數中
    int age = 18;
    // name 是引用型別,變數中儲存的是物件的地址;引用存放在棧中,而物件存放在堆中
    String name = "二狗";

    // 對於基本型別 age,賦值運算子會直接改變變數的值,原來的值被覆蓋
    age = 12;
    // 對於引用型別 name,賦值運算子會改變物件引用中儲存的地址(由指向二狗變為指向鐵蛋)
    // 原來的地址被覆蓋,但原來的物件不會被覆蓋。
    name = "鐵蛋";
}
  • Java中的引數傳遞是按值傳遞的。
  • 如果引數是基本型別,傳遞的是基本型別的字面量值的複製
  • 如果引數是引用型別,傳遞的是引用的物件在堆中地址的複製

相關文章