java基本类型参数传递是值拷贝,形参与实参在各自栈帧中独立存储。每次方法调用创建新栈帧,形参为实参值的副本,修改形参不影响实参,所有8种基本类型均如此。

Java中基本数据类型参数在方法调用时,确实会生成一个独立的内存副本,且该副本与原始变量互不干扰。理解这一点的关键,在于看清栈内存中变量的分布和生命周期。
栈帧隔离:每次调用都开辟新空间
每当方法被调用,JVM就在栈上为它分配一个独立的栈帧。形参变量(如 int y)就存放在这个新栈帧里,而实参(如 int x)仍留在调用方的栈帧中。两者物理地址不同,完全独立。
- main 方法里的 x = 10 存在 main 栈帧中
- changeValue 方法里的 y 是新分配的局部变量,初始值从 x 复制而来,但地址不同
- y 被修改为 20,只影响自己所在的栈帧,main 栈帧中的 x 不可知、也不受影响
复制的是值,不是引用或别名
基本类型没有“指向”概念,它们的值直接存在栈上。传参过程就是一次纯数值拷贝——就像用计算器按出 10,再按一次 “M+” 存到另一个寄存器,两个寄存器的值初始相同,但彼此无关联。
- byte/short/int/long/char/boolean/float/double 都走这条路
- 拷贝发生在参数传递瞬间,之后两个变量再无联系
- 不存在“共享内存”或“别名变量”,更不是 C/C++ 中的指针或引用
典型误操作与正解路径
很多初学者试图通过形参修改外部基本类型变量,结果失败。这不是语法错误,而是机制使然。
- 写 swap(int a, int b) 无法交换外部两个 int 变量——因为 a、b 只是副本
- 想让方法“输出”新值,应使用 return 返回,由调用方重新赋值
- 若需批量处理并更新多个基本值,可封装进数组(引用类型)、容器类(如 IntWrapper),或直接用多个 return 值(配合 record 或自定义返回类)
本质上,这种设计保障了方法的纯净性:它只能靠输入做事,靠输出反馈,不会偷偷改掉你手里的原始数字。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











