Java所有参数传递均为值传递:基本类型传数值副本,修改不影响原变量;引用类型传地址副本,可修改对象内容但无法改变原变量指向。

因为 Java 所有参数传递都是按值调用,基本类型传的是数值本身的副本,方法里操作的只是这个副本,和原始变量完全无关。
形参是独立的局部变量
定义方法时写的参数(如 int x)是形参,它只在方法内部存在,调用时系统会为它分配一块新的栈内存,并把实参的当前值“拷贝过去”。这就像把一张纸上的数字抄到另一张纸上——改新纸,原纸不会变。
- 实参变量(比如
int a = 5;)有自己的内存地址 - 形参
x拥有自己独立的内存地址,初始值等于a的值,但两者无引用关系 - 方法结束后,形参内存被释放,对实参毫无影响
栈帧隔离保证了安全性
每次方法调用都会创建一个独立的栈帧,里面包含所有形参和局部变量。基本类型值直接存放在这个栈帧里,和其他栈帧物理隔离。
- main 方法的
a在自己的栈帧中 - 被调方法的
x在另一个栈帧中 - 两个栈帧之间不共享内存,也没有指针连通
对比引用类型能更清楚理解
引用类型(比如 List 或自定义对象)传的也是“值”——但这个值是对象地址的副本。所以方法内通过 list.add() 修改对象内容,外部能看到;而如果写 list = new ArrayList(),只是让形参指向新地址,不影响原变量所指的对象。
- 基本类型:传的是“数字本身”的副本 → 改副本,原数字不动
- 引用类型:传的是“地址”的副本 → 可顺着地址改对象内容,但不能靠改地址影响原变量
本质不是“基本类型特殊”,而是 Java 统一采用值传递,只是基本类型的“值”就是数据,而引用类型的“值”是地址。

















