>[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)
- windows -- 环境变量
- Vscode -- 编写java
- 初始java
- java -- 关键字
- 编写第一个java程序
- java -- 注释
- 计算机存储 -- 进制
- java -- 类型
- java -- 变量
- 数字类型
- 布尔类型
- 字符类型
- 类型转换
- 双等比较是什么
- java -- 运算符
- 算数运算符
- 字符串拼接
- 关系/比较运算符
- 自增减运算符
- 逻辑运算符
- 三目运算
- 赋值运算符
- 移位运算符
- 位运算符
- 运算符优先级
- java -- 流程控制语句
- if /else if /if -- 判断
- switch case分支结构
- for -- 循环
- 用双重for循环
- while -- 循环
- do while -- 循环
- 案例练习
- java -- 数组
- 数组的存储
- 数组的增删改查
- 数组的特点
- 数组案例
- 二维数组
- 数组的工具方法
- java -- 方法
- java -- 方法的重载
- java -- 方法的调用流程
- java -- 类方法传参注意事项
- java -- 方法练习案例
- 对比 return break continue
- for each循环
- java -- 基础练习
- java -- 面向对象
- java -- 创建类和对象
- java -- 访问控制符
- java -- 类成员方法
- java -- 构造方法
- java -- this
- java -- 封装
- java -- 对象内存图
- java -- 创建对象案例
- java -- static
- java -- 继承
- super -- 关键字
- java -- 构造块和静态代码块
- java -- 重写
- java -- final
- java -- 多态
- java -- 抽象类
- java -- 接口
- 引用类型数据转换
- 综合案例
- java -- 内部类
- java -- 回调模式
- java -- 枚举类型
- java -- switch 使用枚举
- java -- 枚举方法使用
- java -- 枚举类实现接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 递归练习
- java -- 设计模式
- 单例模式
- java -- 注解
- java -- 元注解
- Java -- 核心类库
- java -- 处理字符串
- Java -- String
- String -- 常用方法
- String -- 正则
- Java -- StringBuilder 和 StringBuffer
- 知识点
- Java -- StringJoiner 字符串拼接
- 练习题
- 字符串的总结
- Java -- 包装类
- Integer
- Double
- Boolean
- Character
- java -- 集合类
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 获取当前时间戳
- Java -- 异常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法