JAVA是引用传递还是值传递

我们先不上结论,接下来一点点推导:

public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
        log.info("项目启动成功");
        int a=1;
        add(a);
       log.info("a:{}",a);
    }
    public static void add(int param){
param++;
}

上面这是非常简单的一段代码,这里要先了解下接收参数和实际参数的区别,param就是接收参数,而a则是实际参数;

通过控制台打印出a值其实就已经可以判断java底层究竟是值传递(重新拷贝一份参数,原参数不改变)还是引用传递了,如果a的值改变那就是引用传递,如果a的值不变,那就是值传递;

通过打印可以看到,a的值不变,说明底层是值传递;

其实,java是引用传递还是值传递这个问题从JMM(Java内存模型)就可以看出来:

Java内存模型规定,将所有的变量都存放在 主内存 中,当线程使⽤变量时,会把主内存⾥⾯的变量 复制 到⾃⼰的⼯作空间或者叫作 私有内存 ,线程读写变量时操作的是⾃⼰⼯作内存中的变量。

posted @ 2023-01-14 12:22  HexThinking  阅读(18)  评论(0编辑  收藏  举报