[一篇看懂] 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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章