🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[success] # 方法传参过程 ~~~ public class MaxNum { int a = 0; int b = 0; // 返回 a b 最大值 int max(int a, int b) { int max = a > b ? a : b; return max; } public static void main(String[] args) { MaxNum maxNum = new MaxNum(); int a = 10; int b = 20; int res = maxNum.max(a, b); System.out.println(res); } } ~~~ 上面代码 执行过程: 1. 为main方法中的变量a、b、res分配空间并初始化。此时 a 初始化为10,初始化为20,res 为空 2. 调用max方法,为`max方法`的`形参`变量`a、b`分配空间。 3. 将`实参变量`的数值赋值到`形参变量`的内存空间中。 4. max方法运行完毕后返回,形参变量空间释放。 5. main方法中的res变量得到max方法的返回值。 6. main方法结束后释放相关变量的内存空间。 >[success] # 注意事项 * `基本数据类型`的变量作为`方法的参数传递`,`形参变量`数值的`改变`通常`不会影响`到`实参变量的数值`,因为两个变量有各自独立的内存空间 ~~~ // 改变形参值并没有影响实参 public class MaxNum { void max(int a) { // 改变形参的赋值 a = 0; System.out.println("形参a 的值:" + a); } public static void main(String[] args) { int a = 100; MaxNum maxNum = new MaxNum(); // 打印形参值 maxNum.max(a); // 0 System.out.println("实参a 的值:" + a); // 100 } } ~~~ * `引用数据类型`的变量作为方法的参数传递时,`形参变量`指向内容的`改变`,`会影响`到`实参变量`指向内容的`数值`,因为两个变量指向`同一块内存空间` ~~~ public class MaxNum { void max(int[] ls) { // 改变形参的赋值 ls[0] = 1234; System.out.println("形参a 的值:"+ ls[0] ); // 1234 } public static void main(String[] args) { int[] ls = { 1, 2, 3, 4 }; MaxNum maxNum = new MaxNum(); // 打印形参值 maxNum.max(ls); // 1234 System.out.println("实参a 的值:" + ls[0]); // 1234 } } ~~~ * 当引用数据类型的变量作为方法的参数传递时,若形参变量改变指向后再改变指定的内容,则通常不会影响到实参变量指向内容的改变,因为两个变量指向不同的内存空间。 ~~~ public class MaxNum { void max(int[] ls) { // 相当于给形参的ls 重新赋值已经不在指向之前的实参了 ls = new int[4]; ls[0] = 1234; System.out.println("形参a 的值:"+ ls[0] );// 1234 } public static void main(String[] args) { int[] ls = { 1, 2, 3, 4 }; MaxNum maxNum = new MaxNum(); // 打印形参值 maxNum.max(ls); // 1234 System.out.println("实参a 的值:" + ls[0]); // 1 } } ~~~ >[danger] ##### 总结 1. 基本类型的参数传输存储的数据值。 2. 引用类型的参数传输存储的地址值。 ![](https://img.kancloud.cn/e1/91/e1912f8b057a7501a3bdce495315d95c_1277x589.png)