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