Java 入门第 26 课:方法的参数传递机制(值传递)
2026/6/15 15:32:53 网站建设 项目流程

一、本节课目标

  1. 分清基本类型、引用类型作为方法参数时的传递区别
  2. 彻底搞懂 Java 只有值传递,不存在引用传递
  3. 能看懂参数传递的内存变化
  4. 写出对应课堂案例与练习题

二、核心结论(必背)

Java 中所有方法参数统一为值传递: 调用方法时,会把实参的副本传给形参,形参操作的是副本,不直接操作原变量。 分两大类:基本数据类型、引用数据类型。

三、1. 基本数据类型做参数(byte/short/int/long/float/double/char/boolean)

特点:传递变量的值副本,方法内修改形参,不会影响外面的实参。

示例代码

java运行

public class Lesson26 { public static void changeNum(int num){ num = 100; // 修改的是副本 System.out.println("方法内num:" + num); } public static void main(String[] args) { int a = 10; changeNum(a); System.out.println("方法外a:" + a); // 输出10,不会变 } }

运行结果:

plaintext

方法内num:100 方法外a:10

原理:栈内存复制一份数值给形参,两者完全独立。

四、2. 引用数据类型做参数(数组、类对象、String 等)

传递的是地址值副本: 形参拿到和实参相同的堆内存地址,通过地址修改堆里的内容,原变量会受影响; 但如果给形参重新赋值新地址,不会改变外部实参。

案例 1:数组作为参数,修改数组元素(外部数组改变)

java运行

public class Lesson26 { public static void changeArr(int[] arr){ arr[0] = 999; // 通过地址修改堆中数组元素 } public static void main(String[] args) { int[] nums = {1,2,3}; changeArr(nums); System.out.println(nums[0]); // 输出999,原数组被修改 } }

案例 2:给形参数组重新赋值,外部数组不变

java运行

public class Lesson26 { public static void changeArr(int[] arr){ arr = new int[]{10,20,30}; // 形参指向新数组,和外部无关 } public static void main(String[] args) { int[] nums = {1,2,3}; changeArr(nums); System.out.println(nums[0]); // 输出1,原数组不变 } }

五、特殊:String 字符串参数

String 是引用类型,但字符串不可变,一旦创建不能修改。 方法内给字符串形参重新赋值,外部原字符串不受影响。

java运行

public class Lesson26 { public static void changeStr(String s){ s = "新字符串"; } public static void main(String[] args) { String str = "原始文本"; changeStr(str); System.out.println(str); // 原始文本 } }

六、对比总结表

表格

参数类型传递内容修改形参变量本身通过地址修改堆内数据
基本类型数值副本不影响外部无堆内存
数组 / 自定义对象地址副本不影响外部外部变量能看到变化
String地址副本不影响外部字符串不可变,无法修改原内容

七、课堂练习题

  1. 定义方法交换两个 int 变量的值,运行观察能否交换成功,说明原因。

java运行

public static void swap(int x,int y){ int temp = x; x = y; y = temp; }

答案:不能交换,基本类型值传递,只修改副本。

  1. 自定义 Person 类(name 属性),写方法修改对象的 name,测试外部对象是否变化。

八、课后作业

  1. 写一个方法接收 int 数组,将数组所有元素扩大 2 倍,打印原数组验证。
  2. 区分两段代码:修改数组元素、给数组形参 new 新数组,分别写出运行结果并解释内存原理。

九、本课小结

  1. Java 只有值传递,没有引用传递;
  2. 基本类型传数值副本,互不干扰;
  3. 引用类型传地址副本,可修改堆中内容,不能改变外部变量本身指向;
  4. String 不可变,方法内重新赋值不会改变原字符串。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询