Java中方法参数分为形参和实参:形参是定义时的占位符,位于方法声明括号内,为局部变量;实参是调用时传入的具体值。Java只支持值传递,基本类型传值副本,引用类型传地址副本。

Java中方法参数指的是方法与外界交换数据的“接口”。它让方法能接收外部传入的信息,从而实现可复用、可定制的行为。理解参数的关键,在于分清“定义时写的”和“调用时给的”这两类东西——也就是形参和实参。
形参是方法定义时的占位符
形参出现在方法声明的小括号里,比如 public static void printName(String name) 中的 name 就是形参。它不指向任何真实数据,只是告诉编译器:“这个方法需要一个 String 类型的输入”。
- 形参是局部变量,只在方法内部有效,方法结束就自动销毁
- 它没有初始值,靠调用时的实参来赋值
- 形参名可以任意起,和实参变量名相同也没关系(比如实参叫 userName,形参仍可叫 name)
- 基本类型形参存的是值副本,引用类型形参存的是对象地址的副本
实参是调用方法时真正传递的数据
实参出现在方法调用的位置,比如 printName("张三") 或 printName(userName),这里的 "张三" 或变量 userName 就是实参。它必须是已有确定值的量,可以是字面量、变量、表达式,甚至另一个方法的返回值。
- 实参在调用前就已存在,内存早已分配(可能在栈或堆)
- 实参的类型、个数必须严格匹配形参声明,否则编译报错
- 传递过程不是“把实参交给形参”,而是“把实参的值(或地址副本)复制给形参”
Java只有值传递,但效果因类型而异
Java官方说法是:所有参数传递都是值传递。区别在于“值”的含义:
立即学习“Java免费学习笔记(深入)”;
- 基本类型(int、boolean等):传递的是数值本身的拷贝。方法内修改形参,不影响原变量
- 引用类型(String、ArrayList、自定义对象等):传递的是对象引用的拷贝(即堆中对象地址的副本)。形参和实参指向同一个对象,所以通过形参修改对象内容(如 list.add()),实参看到的是变化;但若在方法内让形参指向新对象(如 list = new ArrayList()),则不会影响实参原来的引用
常见误区提醒
别误以为 Java 有“引用传递”。虽然操作对象时看起来像共享,但本质仍是传地址值的副本。也别混淆形参和局部变量——它们都存栈上、都局部有效,但形参由调用者初始化,局部变量需自己赋值。










