Java语言规范中只有值传递,即所有参数(基本类型和引用类型)均传递实参值的副本:基本类型传数据值,引用类型传地址值,形参重赋值不影响实参指向。

Java 语言规范(JLS)中对方法参数传递的官方术语是“按值传递”(pass by value)。
JLS 明确只定义一种传递机制
JLS §5.4.1(Method Invocation)和 §4.12.2(Variables of Reference Type)指出:所有参数——无论基本类型还是引用类型——在方法调用时,都是将实参的值的一个副本传给形参。这个“值”对基本类型是数据本身,对引用类型是引用的值(即对象在堆中的地址),而非对象本身,也非引用的别名。
为什么不是“引用传递”
JLS 不使用“pass by reference”这一术语来描述 Java 的行为,因为该术语在编程语言理论中有明确定义:形参与实参共享同一存储位置,方法内对形参赋值会改变外部变量的指向。而 Java 中:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 修改形参引用本身(如 p = new Person())不会影响调用方的原始引用变量;
- 能修改对象状态(如 p.setName("X"))是因为两个引用副本指向同一个对象,这属于对象访问行为,不改变传递机制的本质。
JLS 的关键表述原文依据
JLS §5.4.1 原文强调:“Before method invocation, all arguments are evaluated… Each argument is assigned to a corresponding parameter… The evaluation of an argument expression may be interleaved with the evaluation of other argument expressions.” —— 这一过程本质是复制赋值,符合 pass by value 的语义模型。
立即学习“Java免费学习笔记(深入)”;

















