[一篇看懂] java到底是引用傳參還是值傳參

1. 總結

  • java 中基礎類型是值傳參,對象類型是引用傳參
    • 對象類型: new出來的都是, 包括數組

2. 值傳參舉例

public class Main {
  public static void main(String[] args) {
	  int x = 3;
	  Main.swap(x);
	  System.out.println(x);
  }
  static void swap(int x) {
	  x = 10;
  }
}
  • 函數中的值不影響函數外的值

3. 引用傳參

public class Main {
  public static void main(String[] args) {
	  int[] x = new int[10];
	  x[0] = 10;
	  Main.swap(x);
	  System.out.println(x[0]);
  }
  static void swap(int[] x) {
	  x[0] = 12;
  }
}
  • 結果爲12

3.1. 修改引用的部分

package com.wuqi.p1;
import com.wuqi.p2.User;
public class PassTest2 {
    public static void main(String[] args) {
        User user = new User();
        user.setName("wutianqi");
        //傳遞對象,因爲是將指向User的引用user傳遞給了param,
        //在函數中param.setName會反應到真實的對象中去。
        pass(user);
        System.out.println("my name is " + user.getName());
    }

    private static void pass(User param) {
        param.setName("wuqi");
        System.out.println("my name is " + param.getName());
    }
}

3.2. 修改引用

package com.wuqi.p1;

public class PassTest3 {
    public static void main(String[] args) {
        String name = "wutianqi";
        
        //這裏傳遞字符串參數,按照我們以前的觀點這裏應該傳遞的是將指向字符串的name引用
        //傳遞給param,那麼在pass函數中修改參數的值會直接影響到name引用指向的字符串
        //的值,那麼輸出的結果依此應該是 my name is wuqi  my name is wuqi
        pass(name);
        System.out.println("my name is " + name);
    }

    private static void pass(String param) {
        param = "wuqi";
        System.out.println("my name is " + param);
        
    }
}
  • 此處的param = "wuqi"是將整個引用重新賦值了, 不是原來的引用了
發佈了65 篇原創文章 · 獲贊 14 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章