Java中参数传递

145 阅读1分钟

起因

有几次a->b时,想在a内把数据p传到b内,在b内修改p后,a内也同步生效;但是很少能成功,成功的也是在某种情况下。那么具体什么情况才能生效,研究一下。

值传递和引用传递

值传递(pass by value),指的是方法传参时,传递的是实际参数的副本,这时候如果在方法中对参数进行修改,不会影响到实际参数;

引用传递(pass by reference),在方法传参时,将实际参数传到方法中,在方法中对参数进行修改,会影响到实际参数

基础类型,引用类型

  1. 基础类型

java中8大基础类型:

  • 整数型:byte、short、int、long
  • 浮点型:float、double
  • 字符类型:char
  • 布尔类型:boolean
  1. 引用类型

除基础类型之外的数据类型

  • 类、接口
  • 数组
  • 字符串
  • 包装类(Double、Integer...)
  1. 基础类型初始化时,变量的内容在栈内;引用类型初始化时,数据内容在堆上,引用初始化在栈内,并且引用的值是数据内容的内存地址

栗子

测试的代码

public class Test3 {
    public static void main(String[] args) {
        int init = 2; // 没有被改变
        String str = "init"; // 没有被改变
        UpdateSelf updateSelf = new UpdateSelf(); // 被改变
        testParamPass(init, str, updateSelf);
        System.out.println(init);
        System.out.println(str);
        System.out.println(updateSelf.upInt);
    }
​
    public static int testParamPass(int param, String str, UpdateSelf updateSelf) {
        param = 100;
        str = "update";
        updateSelf.setUpInt(99);
        return param;
    }
​
    public static class UpdateSelf {
        int upInt = 3;
​
        public void setUpInt(int upInt) {
            this.upInt = upInt;
        }
    }
}

结论

java中,形参不论是基础类型还是引用类型,在方法内的改动都不会影响到实际参数的数据;只有把本身带有改变对象方法的参数传进来,才会改变实际参数。

参考

www.zhihu.com/question/31…

www.bytenote.cn/2021/02/04/…

itcn.blog/p/231585862…